在这种情况下,我试图创建一个匹配除 |
或 }}
之外的任何内容的模式,但我想了解在一般情况下如何执行此操作也是如此。
也就是说,我想匹配任何字符任意次数,并在点击 |
或 }}
后停止
所以
[\w\s`~!@#\$%\^&\*\(\)-\+=\[\]\\;"',<\.>\/\?\{\}:]*
当我点击}}
或|
时返回
我目前拥有的是:
var regex = /[\w\s`~!@#\$%\^&\*\(\)-\+\=\[\]\\;"',<\.>\/\?\{\}\:]*(?!((\|)|(\}\})))/
然后类似
var str = "abc}}";
str.match(regex)
应该返回abc
,但我的甚至在使用 debuggex 几个小时后也无法工作
我遇到的问题是我还需要被允许在我的比赛中拥有一个}
,所以仅仅从第一组中取出\}
并不会工作。
我什至不明白这是怎么可能的,在其他表达式中我需要能够识别 [除 {{, {:, {{{, |, }}]
之外的任何内容,我可以不掌握编写此代码的逻辑。
另外,如果我错过了需要转义的特殊字符或有多余的反斜杠,请告诉我。
最佳答案
也许是这样的:
/(.+?)(\||}}||$)/
即:
(.+?)
非贪婪捕获一个或多个任意字符的匹配(\||}}||$)
捕获\|
或}}
或$
的匹配>(字符串结尾)。
您想要的结果将是第一个捕获的匹配项,即 .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));
关于javascript - 正则表达式尝试将除特定模式之外的任何内容与允许的模式中的字符进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209777/