Javascript 如何告诉正则表达式不匹配组?

Javascript 如何告诉正则表达式不匹配组?,javascript,regex,Javascript,Regex,我在学习过程中用regex做了一些实验 输入是:我是铁人,我是蝙蝠侠,我将是超人 我想匹配除蝙蝠侠之外的所有单词 我尝试了[^(蝙蝠侠)]+,但它不匹配字符串中的任何字符a、b、m、n、t 我如何实现它?有几种方法可以实现: 使用否定的前瞻断言(?!…)(后面不跟): 对于捕获组(您必须只考虑捕获组1): 您的模式不起作用的原因: 您编写了[^(蝙蝠侠)],但是字符类只是一个没有顺序的字符集合,您无法描述其中的子字符串。它与[^abmnt()] 很好,你正在学习正则表达式,但这太过分了,因为你可

我在学习过程中用regex做了一些实验


输入是:
我是铁人,我是蝙蝠侠,我将是超人

我想匹配除蝙蝠侠之外的所有单词

我尝试了
[^(蝙蝠侠)]+
,但它不匹配字符串中的任何字符
a、b、m、n、t


我如何实现它?

有几种方法可以实现:

使用否定的前瞻断言
(?!…)
(后面不跟):

对于捕获组(您必须只考虑捕获组1):

您的模式不起作用的原因:

您编写了
[^(蝙蝠侠)]
,但是字符类只是一个没有顺序的字符集合,您无法描述其中的子字符串。它与
[^abmnt()]

  • 很好,你正在学习正则表达式,但这太过分了,因为你可以很容易地利用javascript巨大的超自然能力
  • 在大多数情况下,它比等效的正则表达式更快,可读性也更强
  • 自费排除蝙蝠侠:)
  • 这里是你如何做到这一点,没有正则表达式。我相信也会有人发布正则表达式的答案
好了,别说废话了,下面是代码:

var words = input.split(" ").filter(function(str){
    return str.toLowerCase() !== "batman";
});

您可以使用丢弃技术。例如,您可以使用以下模式:

batman|(\w+)
然后,您将在捕获组中存储单词

正如您在屏幕截图中所看到的,使用捕获组捕获绿色单词,而丢弃蓝色的
batman

匹配信息:

MATCH 1
1.  [0-1]   `I`
MATCH 2
1.  [2-4]   `am`
MATCH 3
1.  [5-12]  `ironman`
MATCH 4
1.  [13-16] `and`
MATCH 5
1.  [17-18] `I`
MATCH 6
1.  [19-22] `was`
MATCH 7
1.  [30-33] `and`
MATCH 8
1.  [34-35] `I`
MATCH 9
1.  [36-40] `will`
MATCH 10
1.  [41-43] `be`
MATCH 11
1.  [44-52] `superman`
丢弃模式的另一个示例是,如果要丢弃
蝙蝠侠
超人
,则可以使用:

batman|superman|(\w+)
很好地展示了这一点:


您将只看到用于排除的复杂正则表达式,在javascript中会看到更复杂的正则表达式。请推荐一些复杂的正则表达式。。我想知道你将如何使用这些来完成theOP的要求?@T.J.Crowder:一个简单的匹配,就像OP正在尝试做的那样。
“我是铁人,我是蝙蝠侠,我将是超人”。匹配(/\b(?蝙蝠侠\b)\w+/g)
@Casimimirithippolyte:OP没有显示他在做什么。代码值1024个单词和10240个假设。不过,你的帖子显示它可以工作,这真是太酷了。顺便说一句,它只能在支持ES5的浏览器中工作。这是一个很好的解决方法。。但我对正则表达式模式更感兴趣。。对于更大的问题,我会记住这一点。。谢谢+1:)@rocky谢谢+1,正则表达式技巧是放弃你想要的模式的最好技巧want@rocky顺便说一句,我们刚刚更新了一个示例,以便您能更好地看到它
MATCH 1
1.  [0-1]   `I`
MATCH 2
1.  [2-4]   `am`
MATCH 3
1.  [5-12]  `ironman`
MATCH 4
1.  [13-16] `and`
MATCH 5
1.  [17-18] `I`
MATCH 6
1.  [19-22] `was`
MATCH 7
1.  [30-33] `and`
MATCH 8
1.  [34-35] `I`
MATCH 9
1.  [36-40] `will`
MATCH 10
1.  [41-43] `be`
MATCH 11
1.  [44-52] `superman`
batman|superman|(\w+)