我正在尝试匹配包含由|
分隔的4个字符的字符串当我使用"(\\w{1,4})(\\|(\\w{1,4}))*"
当我在jquery中使用相同的模式时,它不匹配:
$.validator.addMethod("nameId",function(value,element){
return this.optional(element) || /^(\\w{1,4})(\\|(\\w{1,4}))*$/i.test(value);
},"Please enter valid input.");
任何人都可以让我知道如何在jquery中这样做。
谢谢!
答案 0 :(得分:2)
需要双反斜杠才能在字符串中创建文字反斜杠。反斜杠本身被视为字符串中的转义字符。要创建文字\
,您需要将其\\
转义。
由于JS中有正则表达式 literal 而不是字符串,因此您无需转义它:
/^(\w{1,4})(\|(\w{1,4}))*$/
答案 1 :(得分:1)
我的猜测是因为你包含了双反斜杠。如果您将\\w
更改为\w
等,是否可以解决问题?
答案 2 :(得分:1)
使用单个\
作为转义字符:
/^(\w{1,4})(\|(\w{1,4}))*$/i
答案 3 :(得分:1)
Javascript中的正则表达式是一流的,而不是字符串,因此您不需要加倍反斜杠(这会产生文字反斜杠)。
试试这个
/^(\w{1,4})(\|(\w{1,4}))*$/i
编辑: 这与该问题没有直接关系,但对此正则表达式进行了一些其他改进:
应用这些更改会导致稍快一些(在我看来更具可读性)
/^\w{1,4}(?:\|\w{1,4})*$/i
我在这里创建了一个快速比较:http://jsperf.com/capturing-vs-non-capturing-regex-parentheses