我试图在JS中设计一个匹配包含7-14个连续数字的字符串的正则表达式。
我有以下
var regex = /[^a-zA-Z]\d{6,15}[^a-zA-Z]/g;
但是当我使用以下字符串对其进行测试时,它会失败。
var test = "111222333444555666";
它接受前14位数的匹配,这不是我想要的。我想匹配只有当我的正则表达式没有被其他数字包围而不是由字符包围时。
我可以在正则表达式的末尾天真地追逐[^a-zA-Z\d]
,但我觉得这样做更容易。
有什么建议吗?
谢谢, erip
答案 0 :(得分:1)
Word boundaries \b
会检查[A-Za-z0-9_]
之前或之后没有数字。
<强>代码强>
var regex = /\b\d{7,14}\b/g
var test = "abc 111222333444555666 1234 123456789 1234567890123 12345678xyz";
// print all matches
while ((m = regex.exec(test)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
document.writeln("<br />Match: " + m[0]);
}
答案 1 :(得分:0)
我想匹配只有当我的正则表达式没有被其他数字包围时 不被chars包围。
\b[\da-z]{7,14}\b
Assert position at a word boundary «\b»
Match a single character present in the list below «[\da-z]{7,14}»
Between 7 and 14 times, as many times as possible, giving back as needed (greedy) «{7,14}»
A “digit” «\d»
A character in the range between “a” and “z” «a-z»
Assert position at a word boundary «\b»
正则表达式解释
def convert(data):
if isinstance(data, bytes):
return data.decode('ascii')
elif isinstance(data, dict):
return dict(map(convert, data.items()))
elif isinstance(data, tuple):
return map(convert, data)
else:
return data