我想替换字符串中的英文句号,但不要替换小数点,这个正则如何写呢!
比如:这是句号.要替换.这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
替换:这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
我写成这样:str=str.replace(/[^d]\.[^d]/g,"。");
不能实现!
要解决这个问题,需要编写一个正则表达式,它能够区分句号和小数点的使用场景。
我们希望替换句号(.),但不替换小数点。
为此,可以使用正则表达式的“负向前瞻”和“负向后顾”功能。
在JavaScript中,您可以使用如下的正则表达式:
str = str.replace(/(?<![O-9])1.(?![0-91)/g, "。");
这个正则表达式的含义是:
"(?<![0O-9]) 是一个负向后顾(negative lookbehind)断言,它确保句号.之前没有数字([o-9])。
\. 匹配句号。
(?![0-9]) 是一个负向前瞻( negative lookahead )断言,它确保句号.之后没有数字。
因此,这个正则表达式仅匹配那些不被数字包围的句号,并将它们替换为中文句号。
这样就能满足需求,替换文本中的句号,而不影响小数点。
测试结果:
str = '这是句号.要替换.这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点';
// str = str.replace(/(?<![0-9])\.(?![0-9])/g, "。");
// console.log(str);
//返回正确:这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
str = str.replace(/(?<![\d])\.(?![\d])/g, "。");
console.log(str);
//返回正确:这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
// let replaced = str.replace(/\.(?=\s|$)/g, "REPLACEMENT");
// console.log(replaced);
//返回不对:这是句号.要替换.这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
// str = str.replace(/(?<=[^\d])\.(?=[^\d]?)/g, "。");
// console.log(str);
//返回不太正确:这是句号。要替换。这是数字5.6和32.33和这个562.还有。234不要替换其中的小数点
// str = str.replace(/[\D]\./g,"。");
// console.log(str);
//返回错误:这是句。要替。这是数字5.6和32.33和这个562.还。234不要替换其中的小数点
还是前两个最正确!
【版權聲明】再次测试:
这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点
str.replace(/(?<=[^\d])\.(?=[^\d]?)/g, "。");
'这是句号。要替换。这是数字5.6和32.33和这个562.还有。234不要替换其中的小数点'
str.replace(/[\D]\./g,"。");
'这是句号。要替换。这是数字5.6和32.33和这个562.还。234不要替换其中的小数点'
str.replace(/\.(?=\s|$)/g, "REPLACEMENT");
'这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点'
--这个也没问题,但是看不太懂
str.replace(/(?<![\d])\.(?![\d])/g, "。");
'这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点'
str.replace(/(?<![0-9])\.(?![0-9])/g, "。");
'这是句号。要替换。这是数字5.6和32.33和这个562.还有.234不要替换其中的小数点'