gpt4 book ai didi

javascript - jQuery - 正则表达式工作异常

转载 作者:行者123 更新时间:2023-11-29 17:25:02 24 4
gpt4 key购买 nike

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

http://jsfiddle.net/JU8Va/

我的 html:

<input id="btn" type="submit" />​

我的代码:

$('#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

关于javascript - jQuery - 正则表达式工作异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com