我是新手,并且在最后一小时一直在努力解决这个问题。假设你有这些字符串:
grunt.js
我想匹配所有没有连续两个aa的单词,所以在上面它会匹配baa cec haw heef baas bat jackaay
,cec
,haw
,heef
。
这是我到目前为止所做的,但我能感觉完全错误:D
bat
答案 0 :(得分:1)
您可能希望使用否定前瞻:
/(^|\s)(?!\w*aa\w*)(\w+)/gi
您可以通过在Chrome / Firefox(F12)上的控制台粘贴此代码来检查字符串:
var pattern = /(^|\s)(?!\w*aa\w*)(\w+)/gi;
var str = 'baa cec haw heef baas bat jackaay';
while(match = pattern.exec(str))
console.log(match[2]); // position 2 is (\w+) in regex
答案 1 :(得分:1)
你需要一个有两个东西的正则表达式:一个单词边界\b
和一个负面的前瞻(它会以某种方式锚定),这将对后面的子模式施加限制。
\b(?!\w*aa)\w+
正则表达式细分:
\b
- 字边界(?!\w*aa)
- 如果单词包含0个或更多单词后跟两个a
s \w+
- 一个或多个单词字符。代码演示:
var re = /\b(?!\w*aa)\w+/gi;
var str = 'baa cec haw heef bAas bat jackaay bar ha aa lar';
var res = str.match(re);
document.write(JSON.stringify(res));
答案 2 :(得分:0)
在javascript中,您可以使用filter
和正则表达式反转!
非捕获组?:
。
var strings = ['baa','cec','haw','heef','baas','bat','jackaay'];
strings = $(strings).filter(function(index, element){
return !/.*(?:aa).*/.test(element); // regex => .*(?:aa).*
});