我是RegExp的新手。这是我的问题。我有一个输入值。我将RegExp“规则”应用于该输入值。规则以输入值开头,不区分大小写。让我们举个例子。我的参考字符串是Paris (75018)
,我的输入值是Pari
。在那种情况下一切正常。但是,如果输入值为Paris (7
则不起作用。在那种情况下,“系统”告诉我没有匹配,我不明白。它匹配!希望有人能提供帮助。提前感谢您的回复。干杯。马克。
我的HTML:
<input id="btn" type="submit" />
我的js:
$('#btn').click(function() {
var loc = "Paris"; //input value...
var locRegExp = new RegExp("^" + loc, "i"); //
var test = "Paris (75018)"; //reference value
if (test.match(locRegExp)) {
alert('matches');
}
else {
alert('does not match');
}
});
答案 0 :(得分:3)
问题是(
在正则表达式中有特殊含义。要从字面上理解它,你必须将其作为\(
转义。见这里:http://jsfiddle.net/JU8Va/1/
var loc = "Paris \\(7";
var locRegExp = new RegExp("^" + loc, "i");
请注意,有一个双反斜杠;因为反斜杠本身在文字引用的字符串中具有特殊含义,所以你必须转义反斜杠才能在字面上使用正则表达式。
另请注意,对于文字(未引用的)正则表达式,您不需要转义反斜杠,只需要括号。例如:test.match(/Paris \(7/)
。
在正则表达式中,未转义的(
表示&#34;启动捕获组&#34;。捕获组是运行它后检索匹配数据的方式。请点击此处获取有关这些工作原理的答案:http://www.regular-expressions.info/brackets.html
如果您事先不知道loc
将包含哪些内容,则可以使用转义版本替换所有括号实例,如下所示:
var locRegExp = new RegExp("^" + loc.replace(/\(/g, "\\(").replace(/\)/g, "\\)"), "i");
但请注意,除了括号外,还有许多特殊字符可能需要测试。如果你发现自己替换了很多角色,也许可以考虑尝试不同的方法。例如,您是否只是在寻找从测试字符串开头开始的不区分大小写的搜索?为此,您不需要正则表达式,您只需进行子字符串搜索:
test.toLowerCase().indexOf(loc.toLowerCase()) === 0
答案 1 :(得分:1)
您必须转义正则表达式使用的特殊字符。在您的示例中,(
是该角色。
答案 2 :(得分:1)
这是因为“(”是一个特殊的字符,应该被转义。转义模式应该是:
Paris \(7