如何使用javascript中的regexp解决“无效量词”错误?

时间:2009-11-29 22:31:22

标签: javascript regex

我正在尝试将以下URL验证功能从我的PHP代码转移到我的javascript代码:

   this.validate_url = function(field)
    {
        var pattern = new RegExp("^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?");
        var val = $("#" + field).val();

        return pattern.test(val);
    }

这给了我错误:

invalid quantifier ?w+=w+)?(&w+=w+)*)?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

您需要转义字符串声明中的反斜杠:

var pattern = new RegExp("^((ht|f)tp(s?)://|~/|/)?(\\w+:\\w+@)?([a-zA-Z]{1}([\\w-]+\\.)+(\\w{2,5}))(:\\d{1,5})?((/?\\w+/)+|/?)(\\w+\\.\\w{3,4})?((\\?\\w+=\\w+)?(&\\w+=\\w+)*)?");

或者您使用regular expression literal syntax /expr/flags

var pattern = /^((ht|f)tp(s?):\/\/|~\/|\/)?(\w+:\w+@)?([a-zA-Z]{1}([\w-]+\.)+(\w{2,5}))(:\d{1,5})?((\/?\w+\/)+|\/?)(\w+\.\w{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?/;

您还应该尝试使用non-capturing groups (?:expr),而不需要引用该组的匹配。

答案 1 :(得分:3)

由于反斜杠是JavaScript中的转义字符,因此您必须转义 以将其写入字符串:

var pattern = new RegExp("^((ht|f)tp(s?)\\:\\/\\/|~/|/)?([\\w]+:\\w+@)?([a-zA-Z]{1}([\\w\\-]+\\.)+([\\w]{2,5}))(:[\\d]{1,5})?((/?\\w+/)+|/?)(\\w+\\.[\\w]{3,4})?((\\?\\w+=\\w+)?(&\\w+=\\w+)*)?");