如何完全忽略正则表达式的行? (前瞻不起作用)

时间:2016-07-24 23:15:56

标签: javascript regex

这是我查找电话号码的正则表达式

(([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})

但它不起作用。

2 个答案:

答案 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,但这可能需要进一步调整。