JavaScript构造正则执行search时报字符类范围越界错误如何解决
错误诱因
- 正则表达式中
[、]属于特殊元字符,作用是定义字符组(字符类),字符组内部支持通过a-z的格式定义连续字符范围,如果范围的起始字符ASCII码大于结束字符,就会抛出Range out of order in character class的语法错误。 - 你直接将包含
[something]的普通字符串传入RegExp构造函数作为正则模式,正则解析器会把方括号包裹的内容识别为字符组,而非普通的方括号字符,最终触发语法异常。
修复方案
你需要先对传入RegExp构造函数的普通字符串做元字符转义,把所有正则特殊符号转义为普通字面量字符后再使用,步骤如下:
- 定义通用的正则元字符转义函数
function escapeRegExp(str) { // 匹配所有正则特殊元字符,前面加反斜杠转义 return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
- 转义目标字符串后再构造正则实例
var string = 'string [something]'; // 先转义特殊字符 var escapedStr = escapeRegExp(string); var regex = new RegExp(escapedStr, 'g');
处理后正则会将方括号识别为普通字符匹配,不会再触发语法错误。
内容的提问来源于stack exchange,提问作者Mohammed Nazar Ali Tyagi
相关产品推荐
相关产品推荐

