正则表达式:如何确定给定char之前的char出现的奇数/偶数?

13 regex

我想,以取代|OR只在不带引号的术语,如:

"this | that" | "the | other" -> "this | that" OR "the | other"
Run Code Online (Sandbox Code Playgroud)

是的,我可以拆分空间或引用,得到一个数组并迭代它,并重建字符串,但这似乎......不优雅.所以也许有一种正则表达式方法可以通过计算"前面的s 来实现这一点,|而明显奇怪的意思|是引用它甚至意味着不带引号.(注意:"如果存在至少一个偶数,则处理不会开始").

Ala*_*ore 11

确实,正则表达式无法计数,但它们用于确定是否存在奇数或偶数.在这种情况下的技巧是检查管道后面的引号,而不是它之前的引号.

str = str.replace(/\|(?=(?:(?:[^"]*"){2})*[^"]*$)/g, "OR");
Run Code Online (Sandbox Code Playgroud)

打破这一点,(?:[^"]*"){2}匹配下一对引号(如果有的话)以及介入的非引号.在您尽可能多地完成该操作(可能为零)之后,[^"]*$消耗任何剩余的非引号,直到字符串结束.

当然,这假设文本格式正确.它也没有解决转义引号的问题,但如果你需要它,它可以.


cha*_*aos 5

正则表达不计.这就是解析器的用途.