正则表达式在JavaScript中无效

时间:2011-10-28 15:07:42

标签: javascript regex

此正则表达式在JavaScript中无效。它说有一个无效的组。有人可以帮助我让它发挥作用吗?

(?i)^(?![\. -])(?!.*[\. -]$)[\w!$%'*+/=?^`{|\.}~ -]{1,64}$

2 个答案:

答案 0 :(得分:4)

更新:根据评论中提供的建议进行更新。

使用这三个表达式中的一个。它是相同的正则表达式,只需修复(?i)部分并添加所需的转义以匹配Javascript规范。

var regex = new RegExp("^(?![\\. -])(?!.*[\\. -]$)[\\w!$%'*+/=?^`{|\\.}~ -]{1,64}$", "i");
var regex = new RegExp('^(?![\\. -])(?!.*[\\. -]$)[\\w!$%\'*+/=?^`{|\\.}~ -]{1,64}$', "i");
var regex =  /^(?![\. -])(?!.*[\. -]$)[\w!$%'*+/=?^`{|\.}~ -]{1,64}$/i;

如果您使用new RegExp构建正则表达式对象,则必须转义所有反斜杠。第一个和第二个表达式之间的区别在于第二个表达式使用单引号来构造正则表达式字符串,并且单引号作为正则表达式的一部分,因此您必须转义单引号以使其正常工作。第三个表达式使用/pattern/flags语法来构造正则表达式对象。正如Mike在评论中指出的那样,如果它不在字符集中,则必须转义/。所有/都在字符集中,因此不需要转义。

在此处查看有关javascript正则表达式语法的更多信息https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

答案 1 :(得分:3)

(?i)

Javascript不支持正则表达式中的模式修饰符。