忽略regex前瞻中的嵌套组



取以下值:

More writing. More writing?    More writing!

我想把这个字符串分成几个句子,每个句子后面都有空格

因此,我想要的结果是:

["More writing.", "More writing?    ", "More writing!"]

在发现Safari尚未支持Regex的后备检查后,以下是我对后备检查的尝试。

首先,我反转字符串,然后用拆分

/(?=s+!|s+?|s+(?:.{3}|.))/g

这是有效的,除了它多次计数多个空格,得到的结果是:

 ["More writing. More writing? ", " ", " ", " ", "More writing!"]

正如您所看到的,我现在需要手动折叠空白。

有没有一种方法可以将空白与前一句作为一组进行匹配?

更一般地说:

有没有一种支持Safari的方法可以实现这一点?

提前谢谢。

我认为只匹配非句子终止符,然后匹配一个句子结束符,然后再匹配0个或更多空格会更容易:

const str = 'More writing. More writing?    More writing!';
console.log(
str.match(/[^.!?]+[.!?] */g)
);

您可以至少匹配一个单词,后跟.!?之一,并匹配后面的空白字符,而不是拆分。

w+(?:s+w+)*[.?!]s*
  • w+匹配1个以上单词字符
  • (?:s+w+)*可选重复1个以上空白字符和1个以上单词字符
  • [.?!]s*匹配.?!中的一个以及可选的尾部空白字符

Regex演示

const s = "More writing. More writing?    More writing!";
console.log(s.match(/w+(?:s+w+)*[.?!]s*/g));

相关内容

  • 没有找到相关文章

最新更新