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

javascript regex:仅替换字符之间的连字符(而不是空格)

  •  2
  • Kawd  · 技术社区  · 6 年前

    我想替换字符串中两个字符之间的连字符。两个字符可以是 任何东西 只是一个空间。

    string.replace(/regex/g, '');
    

    所以

    • 狗猫:狗猫
    • 狗-猫: 未更改
    • 1-1:11分
    • 1-1: 未更改
    • 美元至美元:$$
    • 美元-美元: 未更改
    • ^-^地址:^^
    • ^-^请注意: 未更改
    • 等。。。
    3 回复  |  直到 6 年前
        1
  •  1
  •   anubhava    6 年前

    您可以使用此regex replace:

    str = str.replace(/(\S)-(\S)/g, '$1$2'); 
    

    RegEx Demo

    在这里 (\S)-(\S) 匹配一个非空格字符,后跟连字符和另一个非空格字符。我们还捕获了组中的两个相邻字符,然后在替换中放回 $1$2 .

    const regex = /(\S)-(\S)/g;
    const str = `dog-cat
    dog - cat
    1-1
    1 - 1
    $-$
    $ - $
    ^-^
    ^ - ^`;
    
    // The substituted value will be contained in the result variable
    const result = str.replace(regex, '$1$2');
    
    console.log(result);
        2
  •  0
  •   Adrian Baginski    6 年前

    尝试此regex: "dog-cat".replace(/(?=\S)(-)(?=\S)/g, '')

        3
  •  0
  •   Wiktor Stribiżew    6 年前

    全部删除 - 非空白字符之间的字符应使用

    .replace(/(\S)-(?=\S)/g, '$1')
    

    查看 regex demo .

    在这里,

    • (\S) -将所有非空白字符剪切并捕获到组1中
    • - -连字符
    • (?=\S) -(肯定的前瞻性保证)在连字符之后,必须有一个除空白之外的字符。不使用此字符,即regex索引保持在其前面,允许将该字符与下一个迭代匹配(如 g 全局修饰符将允许匹配字符串中所有出现的regex模式)。

    JS演示:

    var rx = /(\S)-(?=\S)/g;
    var s = "dog-cat\ndog - cat\n1-1\n1 - 1\n$-$\n$ - $\n^-^\n^ - ^\n1-1-1-1";
    console.log(s.replace(rx, '$1'));