我正在尝试用正则表达式匹配一组字符串在配对字符串之外。
至少有一篇关于此的帖子,但我不清楚它是如何工作的。 Regex match text outside of brackets
例如,示例字符串为:
<= \( <= \) <= \( <= \) <= \( <= \)
我当前的正则表达式使用了后视和前视,尽管这不起作用:
(?<=(\\\)))<=(?=(\\\())
我想匹配不在 \( \)
之间的 <=所以我可以用 &le 替换它以获得:
&le \( <= \) &le \( <= \) &le \( <= \)
请注意 \( \)
可能存在也可能不存在。
最佳答案
您必须为此使用替换函数。匹配\(
最后是 \)
, 或匹配 <=
.如果括号匹配,则替换为整个匹配项(以保持括号内的内容不变) - 否则,替换 <=
匹配&le
:
const input = String.raw`<= \( <= \) <= \( <= \) <= \( <= \)`;
const output = input.replace(
/\\(.*?\\)|<=/g,
match => match === '<=' ? '&le' : match
);
console.log(output);
\\(.*?\\)|<=
表示匹配:
-
\\(
- 文字反斜杠,后跟(
-
.*?
- 任何 Angular 色,直到遇到 -
\\)
- 文字反斜杠,后跟)
或匹配
-
<=
- 普通字符<=
(如果 JS 引擎更先进,没有替换函数也是可能的,例如 \\(.*?\\)(*SKIP)(*FAIL)|<=
,但 JS 不支持)
在 Javascript 中使用 lookbehind 时要小心——只有非常新的浏览器才支持它。许多旧浏览器无法理解它,并会抛出错误。如果您希望您的网站为尽可能多的访问者服务,最好尽可能避免使用回顾,至少在可预见的 future 。
关于javascript - 正则表达式:匹配字符串外的字符串对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719694/