JavaScript正则添加句末双空格时,如何忽略U.S.这类缩写?
解决方案:处理句末双空格并忽略缩写(如U.S.)
你之前加的[^U.S.]是字符集,意思是匹配不是U、.、S的任意单个字符,替换时会把这个字符和后面的标点一起换掉,所以才会出现句子末尾字符丢失的问题。
要实现忽略U.S.这类缩写的需求,应该用负向回顾断言,它能确保匹配的标点前面不是指定的缩写内容。修改后的代码如下:
let report = String(item.Report); let reportDoubleSpace = report.replace(/(?<!U\.S\.)[!?.]+(?=$|\s)/g, ". ");
正则规则说明:
(?<!U\.S\.):负向回顾断言,检查当前标点前面不是U.S.(注意正则里.要转义成\.,否则会匹配任意字符)[!?.]+:匹配一个或多个句末标点(!、?、.)(?=$|\s):正向展望断言,确保标点后面是文本结尾或者空白字符,保证只匹配句末的标点
如果需要忽略更多缩写(比如Mr.、Mrs.),可以扩展断言部分,用|分隔多个例外:
let reportDoubleSpace = report.replace(/(?<!(U\.S\.|Mr\.|Mrs\.))[!?.]+(?=$|\s)/g, ". ");
内容的提问来源于stack exchange,提问作者Xeverus
相关产品推荐
相关产品推荐

