正则表达式与字符串中的模式不匹配

时间:2015-11-07 11:22:40

标签: regex

我是新手,并且在最后一小时一直在努力解决这个问题。假设你有这些字符串:

grunt.js

我想匹配所有没有连续两个aa的单词,所以在上面它会匹配baa cec haw heef baas bat jackaay cechawheef

这是我到目前为止所做的,但我能感觉完全错误:D

bat

3 个答案:

答案 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

您可以阅读有关前瞻here的更多信息。 请参阅Regex101上的it,了解此正则表达式的工作原理。

答案 1 :(得分:1)

你需要一个有两个东西的正则表达式:一个单词边界\b和一个负面的前瞻(它会以某种方式锚定),这将对后面的子模式施加限制。

\b(?!\w*aa)\w+

请参阅the regex demo

正则表达式细分:

  • \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).*
});