JavaScript正则表达式括号不匹配报错:如何提取ID后的数字?
修复正则表达式未匹配括号的语法错误
嘿,这个问题我太熟了!你遇到的Uncaught SyntaxError是因为正则表达式里的)是特殊元字符,直接写在字符串里会被正则引擎当成分组的结束标记,而不是普通的括号字符,所以才会出现"Unmatched ')' "的错误。下面给你两种靠谱的修复方案:
方案一:手动转义特殊字符
既然你知道end变量里的)是普通字符,那就在字符串里把它转义掉。注意在JavaScript字符串中,转义符\本身也需要转义,所以要写成\\):
var data = '(ID: 1003567400) on local'; var start = "ID:"; // 转义end里的),同时注意和数据里的大小写保持一致(原数据是local小写) var end = "\\) on local"; var testRE = data.match(start + "(.*)" + end); console.log(testRE[1]); // 输出:1003567400
方案二:通用正则转义函数(更稳妥)
如果以后你的start或end变量可能包含其他正则特殊字符(比如*、+、[这些),手动转义太麻烦,不如写一个通用的转义函数,把所有正则元字符都转成普通字符:
var data = '(ID: 1003567400) on local'; var start = "ID:"; var end = ") on local"; // 转义所有正则特殊字符的工具函数 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } // 用转义后的字符串构建正则,还可以加'i'标志忽略大小写(可选) var testRE = data.match(new RegExp(escapeRegExp(start) + "(.*)" + escapeRegExp(end), 'i')); console.log(testRE[1]); // 输出:1003567400
额外注意点
你原来的end变量写的是) on Local(大写L),但数据里是on local(小写l),这也会导致匹配失败哦!要么统一大小写,要么像上面代码那样加'i'标志忽略大小写。
内容的提问来源于stack exchange,提问作者user9597092




