jQuery-RegEx工作异常

jQuery - RegEx working bizarrely

本文关键字:异常 工作 jQuery-RegEx      更新时间:2023-09-26

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

问题是(在正则表达式中有特殊含义。要从字面上理解它,您必须将其转义为'(。请参见此处:http://jsfiddle.net/JU8Va/1/

var loc = "Paris ''(7";
var locRegExp = new RegExp("^" + loc, "i");

注意有一个双反斜杠;这是因为反斜杠本身在带引号的字符串中有特殊含义,所以必须转义反斜杠才能在正则表达式中得到它

还请注意,对于文字(未引用)正则表达式,您不需要转义反斜杠,只需要转义括号。例如:test.match(/Paris '(7/)

在正则表达式中,未捕获的(表示"启动捕获组"。捕获组是运行匹配数据后检索匹配数据的方法。有关这些方法的工作原理,请参阅此处:http://www.regular-expressions.info/brackets.html

如果您不提前知道loc将包含什么,您可以将括号的所有实例替换为转义版本,如下所示:

var locRegExp = new RegExp("^" + loc.replace(/'(/g, "''(").replace(/')/g, "'')"), "i");

但要注意,除了括号之外,还有许多特殊字符可能需要测试。如果你发现自己替换了很多角色,也许可以考虑尝试不同的方法。例如,您只是在寻找从测试字符串开头开始的不区分大小写的搜索吗?为此,您不需要正则表达式,只需执行子字符串搜索即可:

test.toLowerCase().indexOf(loc.toLowerCase()) === 0

您必须转义regex使用的特殊字符。在您的示例中,(就是那个字符。

这是因为"("是一个特殊的字符,应该转义。转义模式应该是:

Paris '(7