这是我查找电话号码的正则表达式
(([0-9]{3}[-./ ]{0,1}[0-9]{3}[-./ ]{0,1}[0-9]{4}))|([(][0-9) ]{4,5}[0-9]{3}[-]{0,1}[0-9]{4})
在此处查看此行动 - http://regexr.com/3dsbk
如果前面的符号为#
,我的目标是忽略每个结果我尝试添加一个负面的预测,如下所示:
(?!#)(([0-9]{3}[-./ ]{0,1}[0-9]{3}[-./ ]{0,1}[0-9]{4}))|([(][0-9) ]{4,5}[0-9]{3}[-]{0,1}[0-9]{4})
但它不起作用。
答案 0 :(得分:1)
([^#](([0-9]{3}[-./ ]{0,1}[0-9]{3}[-./ ]{0,1}[0-9]{4}))|([(][0-9) ]{4,5}[0-9]{3}[-]{0,1}[0-9]{4}))
答案 1 :(得分:1)
正则表达式本身无法帮助。您需要在模式匹配周围使用一些编程逻辑。通常的lookbehind替换是在模式开始时使用可选组,然后检查组是否匹配。如果是,则匹配前的字符串存在 - >我们应该丢弃那些比赛。否则,得到它们。
/(#)?[0-9]{3}[-.\/ ]?[0-9]{3}[-.\/ ]?[0-9]{4}|[(][0-9) ]{4,5}[0-9]{3}-?[0-9]{4}/g
请在下面没有代码的情况下查看没有价值的regex demo:
var re = /(#)?[0-9]{3}[-.\/ ]?[0-9]{3}[-.\/ ]?[0-9]{4}|[(][0-9) ]{4,5}[0-9]{3}-?[0-9]{4}/g;
var str = '1012 345 6789\n#1231231231 (only this to be ignored)\nphone 1231231231\n1012.345.6789\n012/345/6789\n555-123-4567 \n+1-(800) 555-2468\n+1-800 555-2468';
var res = [];
while ((m = re.exec(str)) !== null) {
if (!m[1]) {
res.push(m[0]);
}
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
您可能需要调整正则表达式以仅通过在模式周围添加单词边界\b
来提取整个单词,例如/(#)?\b[0-9]{3}[-.\/ ]?[0-9]{3}[-.\/ ]?[0-9]{4}|[(][0-9) ]{4,5}[0-9]{3}-?[0-9]{4}\b/g
,但这可能需要进一步调整。