You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

方案二:通用正则转义函数(更稳妥)

如果以后你的startend变量可能包含其他正则特殊字符(比如*+[这些),手动转义太麻烦,不如写一个通用的转义函数,把所有正则元字符都转成普通字符:

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

火山引擎 最新活动