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 ");
    }

我猜这与存在的括号有关

(外国人、Nickelback 等……)

为什么 JavaScript 找不到这个字符串?我怎样才能让它工作?

4

3 回答 3

3

似乎.search [MDN]将参数转换为正则表达式:

如果传递了一个非 RegExp 对象obj,它会RegExp通过使用隐式转换为 a new RegExp(obj)

然后括号被解释为捕获组,而不是字面意思。

看来您不想使用正则表达式,所以您可以使用.indexOf [MDN]代替:

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

您需要在括号前添加转义符,通常是 1 个括号,但在这种情况下()创建一个,所以我们需要使用\\两个。

\\(
\\)

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 回答