使用jQuery或JavaScript提取括号内字符串的代码问题排查
问题原因
你的正则表达式存在两处核心错误:
- 没有对要匹配的真实圆括号做转义处理:正则中
(和)默认代表捕获组的起止标记,要匹配字符串里实际存在的左、右圆括号,需要写成转义形式\(、\) - 现有正则的匹配逻辑是捕获所有不含
(、)的字符片段,没有限定只匹配括号包裹的内容,所以会把括号外的姓名字段、括号前后的空字符段都识别为匹配结果,最终返回多余内容。
修正后的代码
let string = 'FirstName LastName ( myemail@address.org )'; // \(: 匹配左括号,([^()]*): 捕获括号内所有不含括号的内容,\): 匹配右括号 const regExp = /\(([^()]*)\)/; let matchResult = string.match(regExp); // 取第一个捕获组的内容,trim去除括号内的前后空格 let email = matchResult ? matchResult[1].trim() : ''; console.log(email); // 输出:myemail@address.org
如果需要全局匹配多个括号内的内容,可以保留g修饰符,配合exec方法遍历获取所有捕获组:
let string = 'FirstName (aaa@test.com) LastName (bbb@test.com)'; const regExp = /\(([^()]*)\)/g; let emails = []; let match; while((match = regExp.exec(string)) !== null) { emails.push(match[1].trim()); } console.log(emails); // 输出:['aaa@test.com', 'bbb@test.com']
内容的提问来源于stack exchange,提问作者Federico
相关产品推荐
相关产品推荐

