Allen 2024-01-26 10:16:12 994 1 0 0 0
正则表达式,我想替换字符串中的英文句号,但不要替换小数点,这个正则如何写呢!需要编写一个正则表达式,它能够区分句号和小数点的使用场景。希望替换句号(.),但不替换小数点。为此,可以使用正则表达式的“负向前瞻”和“负向后顾”功能。

我想替换字符串中的英文句号,但不要替换小数点,这个正则如何写呢!

比如:这是句号.要替换.这是数字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不要替换其中的小数点

还是前两个最正确!


Tag: 正则表达式
我也要发一个   ·   返回首页   ·   返回[编程]   ·   前一个   ·   下一个
评论
Allen#1Allen 2024-01-26 10:44:05(N) 链接地址

再次测试:

这是句号。要替换。这是数字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不要替换其中的小数点'
顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[编程]   ·   返回顶部