jQuery - RegEx工作奇怪

时间:2012-03-07 16:30:20

标签: javascript regex

我是RegExp的新手。这是我的问题。我有一个输入值。我将RegExp“规则”应用于该输入值。规则以输入值开头,不区分大小写。让我们举个例子。我的参考字符串是Paris (75018),我的输入值是Pari。在那种情况下一切正常。但是,如果输入值为Paris (7则不起作用。在那种情况下,“系统”告诉我没有匹配,我不明白。它匹配!希望有人能提供帮助。提前感谢您的回复。干杯。马克。

http://jsfiddle.net/JU8Va/

我的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');
        }
    });​

3 个答案:

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