取以下值:
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));