我正在使用从 regexlib 获得的正则表达式模式来验证相对 URL。在他们的网站上,您可以 test模式以确保它符合您的需要。在他们的网站上一切都很好,一旦我在我的网站上使用该模式,我就会收到错误消息:
Invalid range in character class
我知道这个错误通常意味着连字符被错误地用于表示范围并且没有正确转义。但在这种情况下,因为它可以在他们的网站上运行,所以我很困惑为什么它不能在我的网站上运行。
var urlRegex = new RegExp('^(?:(?:\.\./)|/)?(?:\w(?:[\w`~!$=;\-\+\.\^\(\)\|\{\}\[\]]|(?:%\d\d))*\w?)?(?:/\w(?:[\w`~!$=;\-\+\.\^\(\)\|\{\}\[\]]|(?:%\d\d))*\w?)*(?:\?[^#]+)?(?:#[a-z0-9]\w*)?$', 'g');
注意:
如果您要从他们的站点(使用上面的链接)测试正则表达式,请务必将 Regex Engine
下拉列表更改为 Client-side Engine
和 Engine
下拉列表到 Javascript
。
最佳答案
将-
放在字符类的结尾或开头或使用两个反斜杠 在 string
因为您使用的是字符串,所以您需要为每个特殊字符使用两个反斜杠..
注意
查看 this关于 SO 的回答解释了何时使用单反斜杠或双反斜杠来转义特殊字符
关于字符类中的 Javascript 正则表达式无效范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572123/