0

フィルターボックスの上部にリストされる多くのオプションを持つフィルターを作成しようとしています.今、国を追加しようとしており、正規表現を使用することにしました. しかし、私はそれを動作させることができません.何らかの理由で、文字列の先頭ではなく途中で置き換えられます.

JS コード:

function countryCheck(object) {
    var filter = document.getElementById("search_filter");
    var re = new RegExp("<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s");
    filter.innerHTML = filter.innerHTML.replace(re, ("<b>Location</b>: " + object.value.replace("&nbsp;&nbsp;", "") + " | "));
}

HTML コード:

<div id='search_filter'><b>Filter</b>: <b>Location</b>: Anywhere | <b>Player Slots</b>: >=0/>=0</div>
<br />

<select class='select' style='width:100%;' onchange='countryCheck(this);'>
    <option>Anywhere</option>
    <option>Europe</option>
    <option>&nbsp;&nbsp;Sweden</option>
    <option>&nbsp;&nbsp;Germany</option>
    <option>&nbsp;&nbsp;United Kingdom</option>
    <option>&nbsp;&nbsp;France</option>
    <option>North America</option>
    <option>&nbsp;&nbsp;Canada</option>
    <option>&nbsp;&nbsp;United States</option>
    <option>&nbsp;&nbsp;Mexico</option>
</select>

問題の内容を示す jsFiddle: jsFiddle

私はそれが現在<b>Location</b>: [some country] |を置き換えるようにしようとしています<b>Location</b>: [some other country] |

4

4 に答える 4

2

これには正規表現を使用しないでください。ターゲットを次のような独自のタグに入れます。

<div id="search_filter">
     <b>Filter</b>: <b>Location</b>: 
     <span id="search_filter_location">Anywhere</span>
      | <b>Player Slots</b>: >=0/>=0
</div>

次に、このタグ内のコンテンツを次のように置き換えます。

function countryCheck(object) {
    var filter = document.getElementById("search_filter_location");
    filter.innerHTML = object.value.replace("&nbsp;&nbsp;", "");
}
于 2013-05-20T14:27:02.467 に答える
0

試す

function countryCheck(object) {
    var filter = document.getElementById("search_filter");
    var re = /(<b>Location<\/b>:\s)([^|]+)(|)/;
    filter.innerHTML = filter.innerHTML.replace(re, ("$1" + object.value.replace("&nbsp;&nbsp;", "") + " $3"));
}

デモ:フィドル

于 2013-05-20T14:27:08.300 に答える
0

文字列の先頭を置き換えたい場合^は、正規表現の先頭で使用します。これは先頭に一致します ($末尾に一致します) 。

したがって、コードは次のようになります。

function countryCheck(object) {
    var filter = document.getElementById("search_filter");
    var re = new RegExp("<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s");
    filter.innerHTML = filter.innerHTML.replace(re, ("<b>Location</b>: " + object.value.replace(/^(\s){2}/, "") + " | "));
}

編集:文字列の先頭に2つ以上のスペースがあるスペースを置き換えたい場合は、これを正規表現として使用できます:/^(\s){2,}/

于 2013-05-20T14:23:02.363 に答える
0

RegExp コンストラクターと文字列を介して正規表現オブジェクトを作成する場合、バックスラッシュを2 つにする必要があります。ネイティブ構文を使用する方が本当に良いです:

    var re = /<b>Location<\/b>:\s[a-zA-Z\s]+\s\|\s/;

あなたのコードでは、JavaScript トークナイザーが文字列定数を認識したため、\s部分式がプレーンに変換されていました。s

于 2013-05-20T14:24:11.940 に答える