用于替换特定电话号码的正则表达式

时间:2014-11-24 00:28:59

标签: javascript regex

所以我正在制作一个可以更改网站上特定电话号码的正则表达式。 我正慢慢到那里,但我无法弄清楚如何抓住以下数字:(085)-4017877 (085)4017877。

像regexr.com这样的工具告诉我正则表达式捕获这两个数字: 085-4017877 但在我目前的设置上,它没有捕获第一个数字。关于为什么会这样的任何想法?

当前正则表达式: \ 85 - \ S] 4017877 \克

有意忽略数字前面的零点。

应该抓住什么:

085-4017877 085-4017877 (085)-4017877 (085)4017877 085 4017877 31854017877

测试: http://regexr.com/39v0b

       //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;
}

我正在使用的代码替换号码

3 个答案:

答案 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} - 匹配最后七位数字

现在,您可以通过修改非捕获组替代方案轻松更改模式而无需头痛。