-1

这是我想要做的一个例子:

function myFunction() {
var m = 'hi (hi) by akshin Jalilov';
var n = 'hi by akshin jalilov';
var y= 'hi (hi)';
var z= 'hi';

if (m.match(y)) {Logger.log('yes');
                        }else {Logger.log('no');}
if (n.match(z)) {Logger.log('yes');
                        }else {Logger.log('no');}
}

在第一种情况下,结果是“否”,而第二种情况显示“是”。为什么字符串中存在括号会破坏“.match”?如果我输入的数据必须有括号,有没有办法避免这种情况?

在此先感谢您的帮助。

非常感谢 Ian 的解决方案。

RegExp.escape = function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

function myFunction() {
var m = 'hi (hi) by akshin Jalilov';
var n = 'hi by akshin jalilov';
var y = 'hi (hi)';
var z = 'hi';

if (m.match(RegExp.escape(y))) {
    console.log('yes');
} else {
    console.log('no');
}
}

感谢大家的帮助。

4

2 回答 2

0

因为括号在正则表达式中具有特殊含义,所以必须对其进行转义才能被视为文字。

作为dystroy评论,你必须写:

'hi \\(hi\\)'
于 2013-08-05T16:17:58.890 回答
0

您必须替换变量的内容y,您必须转义括号:

http://jsfiddle.net/xafUT/

var m = 'hi (hi)'
var n = 'hi'
var y = 'hi \\(hi\\)'
var z = 'hi'

if (m.match(y)) {
   alert('yes');
} else {
    alert('no');
}
if (n.match(z)) {
    alert('yes');
} else {
    alert('no');
}
于 2013-08-05T16:36:09.137 回答