0

これは動作します:

var str ='<input id="a_49519498" type="radio" name="answers[10903336]" value="49519498" />cat,dog       ';

if(str.search('cat,dog')!=-1)
    {
    alert("found ");
    }

これはしませんが:

var str ='<input id="a_49519498" type="radio" name="answers[10903336]" value="49519498" />Rock (Foreigner, Nickelback, etc...)       ';

if(str.search('Rock (Foreigner, Nickelback, etc...)')!=-1)
    {
    alert("found ");
    }

これは、に存在するブラケットと関係があると思います

(外国人、ニッケルバックなど...)

JavaScriptがこの文字列を見つけられないのはなぜですか?どうすればそれを機能させることができますか?

4

3 に答える 3

3

.search [MDN]は引数を正規表現に変換しているようです。

非正規表現オブジェクトobjが渡された場合、それはを使用して暗黙的にに変換されRegExpますnew RegExp(obj)

括弧はキャプチャグループとして解釈され、文字通りに解釈されません。

正規表現を使用したくないようですので、代わりに.indexOf [MDN]を使用できます。

if(str.indexOf('Rock (Foreigner, Nickelback, etc...)') != -1)
于 2012-09-04T23:54:41.833 に答える
2

パランテシスの前にエスケープを追加する必要があります。通常は1つのパランテシスですが、この場合はグループ()を作成するため、2つ使用する必要があります。\\

\\(
\\)

str.search('Rock \\(Foreigner, Nickelback, etc...\\)')

jsFiddleデモ

于 2012-09-04T23:54:20.223 に答える
1

String.search文字列リテラルではなく、正規表現を検索します(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/searchを参照)。かっこをエスケープするだけです。

str.search('Rock \\(Foreigner, Nickelback, etc...\\)'
于 2012-09-04T23:55:28.277 に答える