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

如何在不删除”的情况下替换以下^;?

  •  1
  • wyc  · 技术社区  · 7 年前

    我想换新的 ^

    var string = 'I\'M SORRY,”^ mutters a strangely familiar voice.'
    

    我是这样做的:

    string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;)\^/g, '$1</b>')
    

    &rdquo; :

    I'M SORRY,</b> mutters a strangely familiar voice.
    

    我想写的是:替换 ^ 对于 </b> 当它在一个 " &rdquo; .

    string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(?=(["]|&rdquo;))\^/g, '$1</b>')

    但是 ^ 未替换:

    I'M SORRY,&rdquo;^ mutters a strangely familiar voice.
    

    5 回复  |  直到 7 年前
        1
  •  3
  •   Wiktor Stribiżew    7 年前

    您正在使用反向引用将捕获的部分保留在结果中。

    /\b\^|([.,?!]|---|\.{3}\s)\^|("|&rdquo;)\^/g
          |------1-----------|   |----2----|
    

    所以,要保留这两个捕获的部分,您需要添加 $1 $2 对于替换模式:

    "$1$2</b>"
    

    regex demo

    ["] 是平等的 " (\.|\,|\?|\!|---|\.\.\.\s) ([.,?!]|---|\.{3}\s) (这样,你也可以避免过度逃避)。

    \^ 图案。因此,您可以将分支合并为一个:

    /(\b|[.,?!"]|---|&rdquo;|\.{3}\s)\^/g
    

    然后换成你所拥有的, "$1</b>" .

        2
  •  3
  •   Aagam Jain    7 年前

    使用此选项:

    string.replace(/\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;)\^/g, '$2</b>');
    
        3
  •  1
  •   Michał Turczyn    7 年前

    你可以试试这个模式: (?<="|&rdquo;)\^ .

    很简单 向后看 (?<="|&rdquo;) ,以查看当前位置之前的 " &rdquo; . 如果这是真的,那么匹配 ^ 把火柴换成 <\b> .

    Demo

        4
  •  1
  •   Léopold Houdin    7 年前

    我建议在整个左边加一个括号。 新的正则表达式看起来像:

    /(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;))\^/g
    

    签出以下内容:

    var s = 'I\'M SORRY,&rdquo;^ mutters a strangely familiar voice.';
    
    console.log('BEFORE:', s);
    
    t = s.replace(/(\b\^|(\.|\,|\?|\!|---|\.\.\.\s)\^|(["]|&rdquo;))\^/g, '$1</b>');
    
    console.log('AFTER:', t);

    希望有帮助!

        5
  •  0
  •   Koushik Chatterjee    7 年前

    我不确定你在工作中还需要什么样的因素 regex ^ " &rdquo; <match found> + </b>

    var str = 'I\'M SORRY,&rdquo;^ mutters a strangely familiar ^voice none "of"^ the magic.'
    
    var res = str.replace(/("|&rdquo;)\^/g,"$1</b>");
    
    console.log(res);