jQuery-RegEx工作异常
jQuery - RegEx working bizarrely
我是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
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 派生进程的stdout在管道传输时工作异常
- JavaScript 异常处理未按预期工作
- $mdDialog.prompt 抛出异常,但该函数在确认时工作正常
- 如何使工作 Chrome 扩展程序的未捕获异常处理程序(由于 CORS 保护而不起作用)
- Node JS-记录工作集群上一次异常
- jQuery-RegEx工作异常
- 谷歌图表在不抛出异常的情况下无法工作
- CORS重定向工作异常
- JavaScript -为什么推送不工作并抛出异常
- 窗口.onerror不能在移动设备上工作——我应该如何处理未处理的异常
- 函数正向引用工作异常
- html5 canvas-Javascript createImageData抛出DOM异常9,rgb数据不工作
- 当数组定义为3时,一个Javascript - forth值的神秘工作没有返回异常