RegEx试图匹配除了特定模式之外的所有模式与允许的模式中的字符

时间:2016-10-24 02:07:44

标签: javascript regex match

在这种情况下,我正在尝试创建一个匹配|}}的模式,但我想了解如何在一般情况下执行此操作。

这就是我想多次匹配任何字符,并在我点击|}}时停止 所以

[\w\s`~!@#\$%\^&\*\(\)-\+=\[\]\\;"',<\.>\/\?\{\}:]*

并在点击}}|

时返回

我目前拥有的是:

var regex = /[\w\s`~!@#\$%\^&\*\(\)-\+\=\[\]\\;"',<\.>\/\?\{\}\:]*(?!((\|)|(\}\})))/ 

然后像

var str = "abc}}";
str.match(regex)

应该返回abc但是即使在使用debuggex

的几个小时之后我也不会工作

我遇到的问题是我还需要在我的匹配中只有一个},所以只从第一组中取出\}不起作用。 我甚至不明白这是如何可能的,在其他表达式中我需要能够识别[anything but {{, {:, {{{, |, }}]而我无法掌握编码这个的逻辑。 如果我错过了需要转义的特殊字符或者有多余的反斜杠,请告诉我。

2 个答案:

答案 0 :(得分:1)

也许是这样的:

/(.+?)(\||}}||$)/

那是:

  • (.+?)非贪婪地捕捉任何一个或多个角色的匹配
  • (\||}}||$)捕获\|}}$(字符串结尾)的匹配。

您想要的结果将是第一个捕获的匹配,即.match()返回的数组的第二项(如果匹配):

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

这应该这样做:

var regex = /(.*[^}}|\|])/

()表示一个捕获组,这就是您在示例中返回abc的方式。

一般翻译:

.*任意数量的任何字符......

[^除了......

}}|\|]}}或|。

(提示 - https://regex101.com/是一个非常方便的工具,用于生成和测试正则表达式。)