忽略正则表达式前瞻中的嵌套组
Ignore nested groups in regex lookahead
取以下内容:
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 的方式实现此目的?
提前致谢。
我认为只匹配 non-sentence-terminators,然后是句子终止符,然后是 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*
匹配 .
?
或 !
之一和可选的尾随空白字符。
const s = "More writing. More writing? More writing!";
console.log(s.match(/\w+(?:\s+\w+)*[.?!]\s*/g));
取以下内容:
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 的方式实现此目的?
提前致谢。
我认为只匹配 non-sentence-terminators,然后是句子终止符,然后是 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*
匹配.
?
或!
之一和可选的尾随空白字符。
const s = "More writing. More writing? More writing!";
console.log(s.match(/\w+(?:\s+\w+)*[.?!]\s*/g));