我有这个字符串:
this is a test
在这个字符串的末尾我有一个空格和新行。 我想在最后一个空格中提取(用于计算)字符串中的所有空间组。 用我的简单正则表达式
/\s+/g
我获得了这些群体:
this(1)is(2)a(3)test(4)
我想从组中排除第四个空格,因为如果字符串以空格结尾,我想只获得3个组。 什么是正确的正则表达式?
答案 0 :(得分:1)
根据正则表达式的风格,您可以使用两种方法。
如果不支持原子组/占有量词,请使用这样的先行解决方案:
(?:\s(?!\s*$))+
请参阅regex demo
重点是我们只匹配一个没有跟随0+其他空白符号的空格,后跟一个字符串结尾(检查是否使用(?!\s*$)
前瞻执行)。
否则,请使用
\s++(?!$)
见another demo。具有原子组的等效表达式为(?>\s+)(?!$)
。
在这里,我们仅在抓取所有空格后检查字符串位置的结束而不回溯到\s++
模式(因此,如果在最后一个空格之后存在字符串的结尾,则整个匹配失败)。
此外,可以在JavaScript中模拟原子组,有助于捕获正向前瞻,然后使用反向引用,如
(?=(\s+))\1(?!$)
但是,this pattern在性能方面成本很高。