使用regexp查找最后排除组的所有字符

时间:2016-05-27 12:33:19

标签: javascript regex regex-negation regex-lookarounds regex-greedy

我有这个字符串:

this is a test

在这个字符串的末尾我有一个空格和新行。 我想在最后一个空格中提取(用于计算)字符串中的所有空间组。 用我的简单正则表达式

/\s+/g

我获得了这些群体:

this(1)is(2)a(3)test(4)

我想从组中排除第四个空格,因为如果字符串以空格结尾,我想只获得3个组。 什么是正确的正则表达式?

1 个答案:

答案 0 :(得分:1)

根据正则表达式的风格,您可以使用两种方法。

如果不支持原子组/占有量词,请使用这样的先行解决方案:

(?:\s(?!\s*$))+

请参阅regex demo

重点是我们只匹配一个没有跟随0+其他空白符号的空格,后跟一个字符串结尾(检查是否使用(?!\s*$)前瞻执行)。

否则,请使用

\s++(?!$)

another demo。具有原子组的等效表达式为(?>\s+)(?!$)

在这里,我们仅在抓取所有空格后检查字符串位置的结束而不回溯到\s++模式(因此,如果在最后一个空格之后存在字符串的结尾,则整个匹配失败)。

此外,可以在JavaScript中模拟原子组,有助于捕获正向前瞻,然后使用反向引用,如

(?=(\s+))\1(?!$)

但是,this pattern在性能方面成本很高。