所以我正在制作一个可以更改网站上特定电话号码的正则表达式。 我正慢慢到那里,但我无法弄清楚如何抓住以下数字:(085)-4017877 (085)4017877。
像regexr.com这样的工具告诉我正则表达式捕获这两个数字: 085-4017877 但在我目前的设置上,它没有捕获第一个数字。关于为什么会这样的任何想法?
当前正则表达式: \ 85 - \ S] 4017877 \克
有意忽略数字前面的零点。
应该抓住什么:
085-4017877 085-4017877 (085)-4017877 (085)4017877 085 4017877 31854017877
//step through dom
function recurseDOM(scope, newText, patt)
{
var i = 0, nodes, node;
if(scope.childNodes)
{
nodes = scope.childNodes;
for(i;i<nodes.length;i++)
{
node = nodes[i];
if(node.nodeType === 3)
{
//is a text node
checkTextNode(node, newText, patt);
}
if(node.childNodes)
{
//loop through child nodes if child nodes are found
recurseDOM(node, newText, patt);
}
node = null;
}
nodes = null;
}
}
//Find and replace
function checkTextNode(node, newText, patt)
{
var text = node.data;
var test = patt.test(text);
if(test)
{
//match found, replace node's textual data with specified string
node.data = text.replace(patt, newText);
newText = null;
text = null;
}
test = null;
}
我正在使用的代码替换号码
答案 0 :(得分:1)
你的正则表达式对于你想要捕获的模式来说太简单了,这个正则表达式将匹配你所有的测试用例:
/(\+31)?(\()?0?85(\)-?| |-)?4017877/
我已经让你成为test here
如果您想要这个数字的通用正则表达式,需要用'\ d'替换数字:
/(\+\d\d)?(\()?\d?\d\d(\)-?| |-)?\d\d\d\d\d\d\d/
答案 1 :(得分:1)
你非常接近,这个应该抓住你所有的情况:
/85\)?[- ]?4017877/g
它只是在短划线/空格字符类之前添加了一个可选括号。
答案 2 :(得分:-1)
我使用:
(?:\d{3}\s?|\(\d{3}\)|\+\d{4})-?\d{7}
故障:
(?:
- 打开非捕获组,以匹配备用模式(保持整洁)\d{3}\s?|
- 匹配完整区号\(\d{3}\)|
- 匹配括号括起来的区号\+\d{4}
- 匹配国家/地区代码和区号)
- 关闭非捕获组-?
- 连字符零或一次\d{7}
- 匹配最后七位数字现在,您可以通过修改非捕获组替代方案轻松更改模式而无需头痛。