Regexp匹配空格不是特定的单词

时间:2015-11-28 22:24:32

标签: javascript regex

我花了最近几个小时试图找出如何匹配所有空格(\s),除非后跟AND\s\sAND

到目前为止我有这个

\s(?!AND\s)

但它会匹配\sAND之后的空格,但我不想要那个。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

通常,当您想要按特定上下文中显示的单个字符进行拆分时,可以使用匹配的方法替换该方法。

我建议匹配所有非空白字符序列与AND一起用之前的空格包围,然后匹配任何其他非空格序列。因此,我们将确保获得一系列必要的子串:

\S+\sAND\s\S+|\S+

请参阅regex demo

我假设某些非空白字符之间出现\sAND\s模式。



var re = /\S+\sAND\s\S+|\S+/g; 
var str = 'split this but don\'t split this AND this';
var res = str.match(re);
document.write(JSON.stringify(res));




Alan Moore所示,可以将更改展开到\S+(?:\sAND\s\S+)*

  • \S+ - 一个或多个非空白字符
  • (?:\sAND\s\S+)* - 0或更多(因此,它是可选的)序列...
    • \s - 一个空格(添加+以匹配1个或更多)
    • AND - 文字AND字符序列
    • \s - 一个空格(添加+以匹配1个或更多)
    • \S+ - 一个或多个非空白符号。

答案 1 :(得分:0)

由于JS不支持lookbehinds,您可以使用the following trick

  • 匹配(\sAND\s)|\s
  • 丢弃$1有值的匹配

这是一个简短的例子,用下划线替换你想要的空格:

var str = "split this but don't split this AND this";
str = str.replace(/(\sAND\s)|\s/g, function(m, a) {
	return a ? m : "_";
});
document.write(str);