代码之家  ›  专栏  ›  技术社区  ›  wyc

如何防止此正则表达式代码删除句点?

  •  -1
  • wyc  · 技术社区  · 6 年前

    我正在写一个代码来把愚蠢的引语变成聪明的引语:

    text.replace(/\b"|\."/g, '”')
    

    (我加了句号或句号,因为有时句子的结尾是句号而不是单词。)

    输入:

    "This is a text."
    

    输出:

    “This is a text”
    

    期望输出:

    “This is a text.”
    

    如您所见,该代码删除了点。

    如何预防?

    规则:我想替换单词末尾或句点后的双引号,将它们转换为右双引号。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Community miroxlav    4 年前

    您应该在替换中包括捕获组1,您可以使用以下方法来完成此操作:

    replace(/\b"$|(\.)"$/g, "$1”");
    

    $1将包含。

    添加$可避免错过以下情况:

    "This is a "text"."
    

    编辑新规则:

    如果还要替换报价的内部报价,请执行以下操作>

    const regex = /( ")([\w\s.]*)"(?=.*"$)|\b"$|(\.)?"$/g;
    const str = `"This is a "subquote" about "life"."`;
    const subst = `$1$2$3”`;
    
    // The substituted value will be contained in the result variable
    const result = str.replace(regex, subst);
    
    console.log('Substitution result: ', result);

    “你一个人生活,总是有人陪伴”

    “你住在”“永远在一起”

    “你活在”黑暗中“…总是有人陪伴”

    你“一个人”住,非常“一个人”,总是和人在一起

        2
  •  1
  •   enxaneta    6 年前

    let text = '"This is a text."'
    console.log(
    text.replace(/\b"|(\.)"/g,'$1\u201d')
    )