TypeScript正则需求:提取等号后非反斜杠开头的字母
TypeScript正则匹配问题解决方案
需求说明
- 匹配等号之后的所有字母
- 排除以反斜杠(\)开头的单词/字母
- 示例输入:
d = \\sqrt{w^2 + l^2} - 期望输出:
[w, l]
当前问题
你编写的正则/(?<!\\)\b(?!\\?\.)(\w+)/g会匹配到等号前的d和数字2,问题出在两点:一是未限定匹配范围必须在等号之后,二是\w+会包含数字和下划线,不符合只匹配字母的要求。
解决思路与实现
方法一:先截取等号后内容再匹配
这种方式逻辑更直观,先提取等号后的内容,再在该范围内匹配目标:
const input = `d = \\sqrt{w^2 + l^2}`; // 提取等号之后的全部内容 const afterEqualPart = input.split('=').slice(1).join('='); // 匹配不以反斜杠开头的纯字母单词 const targetRegex = /(?<!\\)\b([a-zA-Z]+)\b/g; // 提取所有匹配结果 const result = [...afterEqualPart.matchAll(targetRegex)].map(item => item[1]); console.log(result); // 输出: [w, l]
方法二:单正则直接匹配
如果想用单个正则完成,可利用正向断言限定匹配必须在等号之后:
const input = `d = \\sqrt{w^2 + l^2}`; const targetRegex = /(?<==.*)(?<!\\)\b([a-zA-Z]+)\b/g; const result = [...input.matchAll(targetRegex)].map(item => item[1]); console.log(result); // 输出: [w, l]
正则关键部分解释
(?<==.*):正向回溯断言,确保当前匹配内容处于等号之后的区域(?<!\\):负向断言,排除前面带有反斜杠的单词\b([a-zA-Z]+)\b:匹配纯字母组成的完整单词,避免匹配数字或下划线
内容的提问来源于stack exchange,提问作者Rayyan Alam
相关产品推荐
相关产品推荐

