JavaScript中Invalid regular expression错误的成因及解决方案
正则表达式构造函数含特殊字符报错的原因与解决方法
错误原因
在JavaScript里,RegExp构造函数接收的是字符串形式的正则表达式内容。而[属于正则的特殊元字符,用来标记字符类(比如[a-z]匹配小写字母)的开始。当你直接把包含[的字符串"Mat["传给RegExp时,生成的正则表达式是/Mat[/gi——正则引擎会认为这里开启了一个字符类,但找不到对应的闭合标记],所以抛出Invalid regular expression: /mat[/: Unterminated character class错误。
解决方法
方法1:手动转义特殊字符
把字符串里的[转义成\[(因为在字符串中,反斜杠本身也要转义,所以写成"Mat\\["),这样RegExp就能正确识别这是一个普通的[字符,而不是字符类的起始标记:
function findMatch() { var string="Find the match"; var text = "Mat\\["; // 手动转义[ string.replace(new RegExp(text, 'gi'), "found") }
方法2:使用通用转义函数
如果不确定输入字符串里会包含哪些正则特殊字符,可以写一个通用函数,自动转义所有正则元字符(比如[、]、*、+、.等):
function escapeRegExp(str) { // 转义所有正则特殊元字符 return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function findMatch() { var string="Find the match"; var text = "Mat["; string.replace(new RegExp(escapeRegExp(text), 'gi'), "found") }
这个函数会把输入字符串里的每一个正则特殊字符都加上反斜杠转义,确保RegExp构造函数能将其当作普通字符处理。
内容的提问来源于stack exchange,提问作者Web Dev
相关产品推荐
相关产品推荐

