javascript正则表达式的“意外的量词”错误

时间:2012-09-19 11:45:41

标签: javascript regex

当我在javascript中使用此正则表达式声明时:

var phoneRegExp = /^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$/i;

它在IE10中给出了“意外的量词”错误。 Chrome会报告“无效群组”。 据我所知,表达式还可以,我用http://regexhero.net/tester测试了它,它与.NET4.5 PhoneAttribute中使用的相同

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

面对同样的问题并通过颠倒原始正则表达式模式并用前瞻代替lookbehind来解决它。最后一个技巧是反转将要对正则表达式进行测试的输入字符串。

这个想法在Steven Levithan的Mimicking Lookbehind in JavaScript博客文章中有很好的描述。

下面是我的测试页面,您可以在其中看到正在运行的正则表达式:

<html>
    <head>
        <title>Phone Number RegExp Test Page</title>
    </head>
    <body>
        <script>
            function validateInput() {              
                var phoneRegex = new RegExp("^(\\d+\\s?(x|\\.txe?)\\s?)?((\\)(\\d+[\\s\\-\\.]?)?\\d+\\(|\\d+)[\\s\\-\\.]?)*(\\)([\\s\\-\\.]?\\d+)?\\d+\\+?\\((?!\\+.*)|\\d+)(\\s?\\+)?$", "i");

                var input = document.getElementById("tbPhone");
                var value = input.value.split("").reverse().join("");
                alert(phoneRegex.test(value));
            }           
        </script>

        <input type="text" id="tbPhone" />
        <button onclick="javascript:testPhone()">Validate</button>
    </body>
</html>