Javascript 如何使用正则表达式完全忽略行?(向前看不起作用)
这是我查找电话号码的正则表达式Javascript 如何使用正则表达式完全忽略行?(向前看不起作用),javascript,regex,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}) 在这里看到它的作用- 我的目标是忽略每个结果,如果前面的符号是# 我尝试过添加一个消极的前瞻,如下所示: (?!#)(([0-9]{3}[-./ ]{0,1}[0-9]{3}[-./ ]{0,1}[0-9]{4}))|([(][0-9) ]{4,5}[0-9]{3}[-]{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})
在这里看到它的作用-
我的目标是忽略每个结果,如果前面的符号是#
我尝试过添加一个消极的前瞻,如下所示:
(?!#)(([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-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-9]{3}[-.\/ ]?[0-9]{3}[-.\/ ]?[0-9]{4}|[(][0-9) ]{4,5}[0-9]{3}-?[0-9]{4}/g
请参见下面的“无代码无值”部分:
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#1231231(仅此可忽略)\n电话1231231\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){
如果(!m[1]){
res.push(m[0]);
}
}
document.body.innerHTML=“+JSON.stringify(res,0,4)+”代码>正则表达式本身无能为力。您需要围绕模式匹配使用一些编程逻辑。通常的查找替换是在模式开始时使用可选组,然后检查组是否匹配。如果有,则匹配之前的字符串存在->我们应该放弃这些匹配。否则,去拿
/(#)?[0-9]{3}[-.\/ ]?[0-9]{3}[-.\/ ]?[0-9]{4}|[(][0-9) ]{4,5}[0-9]{3}-?[0-9]{4}/g
请参见下面的“无代码无值”部分:
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#1231231(仅此可忽略)\n电话1231231\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){
如果(!m[1]){
res.push(m[0]);
}
}
document.body.innerHTML=“+JSON.stringify(res,0,4)+”代码>是的,那是我的错误。但是你只是说前面有符号#的数字必须忽略,所以最后有#的数字可以捕捉。啊,我误解了OP关于前面的问题+1这也捕获了其他符号。例如:-800 555-2468@VitaliyHayda,这是否意味着这不是你要找的。如果是,为什么你的问题中没有具体说明?你说你不想要的唯一字符是#
?@VitaliyHayda Javascript regex没有那么聪明。Javascript没有像lookback或match reset这样的奇特特性。您必须以编程方式将其从比赛中删除。是的,那是我的错误。但是你只是说前面有符号#的数字必须忽略,所以最后有#的数字可以捕捉。啊,我误解了OP关于前面的问题+1这也捕获了其他符号。例如:-800 555-2468@VitaliyHayda,这是否意味着这不是你要找的。如果是,为什么你的问题中没有具体说明?你说你不想要的唯一字符是#
?@VitaliyHayda Javascript regex没有那么聪明。Javascript没有像lookback或match reset这样的奇特特性。你必须通过编程将其从匹配中删除。问题是消极的前瞻性…好的…前瞻性。它从匹配的第一个位置开始查看正则表达式是否不匹配。您可能需要一个Javascript没有的lookback。JS不够复杂,无法忽略任何内容,更不用说一行了。这样做的方法是匹配罪犯,然后在匹配后忽略它或不忽略它<代码>([#])?((?:[0-9]{3}[-./]?){2}[0-9]{4}[0-9]{4,5}[0-9]{3}-?[0-9]{4})
如果捕获组1匹配,请忽略它。问题是消极的前瞻性展望……很好……向前看。它从匹配的第一个位置开始查看正则表达式是否不匹配。您可能需要一个Javascript没有的lookback。JS不够复杂,无法忽略任何内容,更不用说一行了。这样做的方法是匹配罪犯,然后在匹配后忽略它或不忽略它<如果捕获组1匹配,则忽略它。