使用正则表达式在末尾查找所有字符(不包括组)



我有这个字符串:

this is a test

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

/s+/g

我获得这些组:

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

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

根据正

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

如果不支持原子组/所有格量词,请使用如下所示的前瞻性解决方案:

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

查看正则表达式演示

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

否则,使用

s++(?!$)

查看另一个演示。具有原子组的等效表达式是 (?>s+)(?!$)

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

此外,可以在 JavaScript 中模拟原子组,帮助捕获积极的前瞻,然后使用反向引用,例如

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

但是,这种模式在性能方面成本高昂。

最新更新