javascript - 正则表达式:匹配字符串外的字符串对

标签 javascript regex

我正在尝试用正则表达式匹配一组字符串配对字符串之外。

至少有一篇关于此的帖子,但我不清楚它是如何工作的。 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/

相关文章:

javascript - 如何在我的 Firebase 无限滚动中按时间顺序正确排序数据?

Javascript:通过数组映射后编辑变量

javascript - 如何找到数组最小值的id?

regex - 如何使用 Excel 公式来验证自定义的电子邮件地址?

java正则表达式将一个属性列表从一个sql查询拆分成一个字符串[] of attrs

regex - Firefox 错误 : Unable to check input because the pattern is not a valid regexp: invalid identity escape in regular expression

javascript - var so = {名称 : 'stack' } ['overflow' ];

javascript - 缓存与 .querySelector

python - 根据python中的模式对字符串进行拆分和分组

Java - 获取数字格式的正则表达式