javascript - 正则表达式:匹配字符串之外的字符串对
问题描述
我正在尝试将配对字符串之外的一组字符串与正则表达式匹配。
至少有一篇关于此的帖子,但是我不清楚它是如何工作的。正则表达式匹配括号外的文本
例如,示例字符串为:
<= \( <= \) <= \( <= \) <= \( <= \)
我当前的正则表达式使用了后向和前瞻,尽管这不起作用:
(?<=(\\\)))<=(?=(\\\())
我想匹配不在之间的 <= ,\( \)
所以我可以用 &le 替换它来获得:
&le \( <= \) &le \( <= \) &le \( <= \)
请注意,\( \)
可能存在也可能不存在。
解决方案
您必须为此使用替换功能。匹配\(
最终后跟\)
, OR 匹配<=
。如果括号匹配,则替换为整个匹配项(以保持括号内的内容不变) - 否则,将<=
匹配项替换为&le
:
const input = String.raw`<= \( <= \) <= \( <= \) <= \( <= \)`;
const output = input.replace(
/\\(.*?\\)|<=/g,
match => match === '<=' ? '&le' : match
);
console.log(output);
\\(.*?\\)|<=
表示匹配:
\\(
- 文字反斜杠,后跟(
.*?
- 任何字符,直到遇到\\)
- 文字反斜杠,后跟)
或匹配
<=
- 普通字符<=
(如果 JS 引擎更高级,也可以不用替换功能,例如\\(.*?\\)(*SKIP)(*FAIL)|<=
,但 JS 不支持)
在 Javascript 中使用lookbehind 时要小心——只有非常新的浏览器支持它。许多较旧的浏览器无法理解它,并且会抛出错误。如果您希望您的网站为尽可能多的访问者服务,最好尽可能避免使用后向搜索,至少在可预见的未来是这样。
推荐阅读
- regex - 用双引号替换单引号,当且仅当引号在特定字符串之后
- javascript - jquery自动完成建议出现在页面底部
- p5.js - 用 Paper.js 填充空间的有机形状
- mongodb - MongoDB Compass - 卡在连接到 Atlas
- google-sheets - 将正则表达式与 Switch 大小写一起使用
- css - 用表情符号(或其他 Unicode 字符)替换项目符号点(但不要更改嵌套项目符号)
- python - 尝试 pip install audioread 时退出状态 1
- nix - nix nixlang:通过 nix-build -A hello 在 default.nix 中未定义的变量 pkgs,但在 nix repl 中有效
- makefile - makefile 中的“变量”目标名称
- c++ - Arduino-C++ Bool 不会从 False 变为 True