我花了最近几个小时试图找出如何匹配所有空格(\s
),除非后跟AND\s
或\sAND
。
到目前为止我有这个
\s(?!AND\s)
但它会匹配\sAND
之后的空格,但我不想要那个。
任何帮助都将不胜感激。
答案 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);