在这种情况下,我正在尝试创建一个匹配|
或}}
的模式,但我想了解如何在一般情况下执行此操作。
这就是我想多次匹配任何字符,并在我点击|
或}}
时停止
所以
[\w\s`~!@#\$%\^&\*\(\)-\+=\[\]\\;"',<\.>\/\?\{\}:]*
并在点击}}
或|
我目前拥有的是:
var regex = /[\w\s`~!@#\$%\^&\*\(\)-\+\=\[\]\\;"',<\.>\/\?\{\}\:]*(?!((\|)|(\}\})))/
然后像
var str = "abc}}";
str.match(regex)
应该返回abc
但是即使在使用debuggex
我遇到的问题是我还需要在我的匹配中只有一个}
,所以只从第一组中取出\}
不起作用。
我甚至不明白这是如何可能的,在其他表达式中我需要能够识别[anything but {{, {:, {{{, |, }}]
而我无法掌握编码这个的逻辑。
如果我错过了需要转义的特殊字符或者有多余的反斜杠,请告诉我。
答案 0 :(得分:1)
也许是这样的:
/(.+?)(\||}}||$)/
那是:
(.+?)
非贪婪地捕捉任何一个或多个角色的匹配(\||}}||$)
捕获\|
或}}
或$
(字符串结尾)的匹配。您想要的结果将是第一个捕获的匹配,即.match()
返回的数组的第二项(如果匹配):
var regex = /(.+?)(\||\}\}|$)/;
console.log("abc}}".match(regex));
console.log("abc}def}}".match(regex));
console.log("abc}123}456}}x".match(regex));
console.log("abc|def".match(regex));
console.log("abc".match(regex));
&#13;
答案 1 :(得分:0)
这应该这样做:
var regex = /(.*[^}}|\|])/
()
表示一个捕获组,这就是您在示例中返回abc
的方式。
一般翻译:
.*
任意数量的任何字符......
[^
除了......
}}|\|]
}}或|。
(提示 - https://regex101.com/是一个非常方便的工具,用于生成和测试正则表达式。)