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