【问题标题】:Regex for matching spaces not preceded by commas匹配空格的正则表达式前面没有逗号
【发布时间】:2009-08-14 12:20:20
【问题描述】:

我需要像这样转换一个字符串:

tag, tag2, longer tag, tag3

到:

tag, tag2, longer-tag, tag3

为了简短起见,我需要用连字符替换不以逗号开头的空格,并且我需要在 Javascript 中这样做

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我认为这应该可行

    var re = new RegExp("([^,\s])\s+" "g");
    var result = tagString.replace(re, "$1-");
    

    编辑:在 Blixt 观察后更新。

    【讨论】:

    • 我接受这个是因为它是第一个有效的。不敢相信我忘记了 1 美元……
    • 如下所示,如果您想匹配制表符等,您也可以使用 \s 代替空格,但我认为它是空格 :)
    • 请考虑一个逗号后跟两个或多个逗号将在标签前面加上 -:abc,<space><space>def 变为 abc, -def 你想要的是 /([^,\s])\s+/g 替换 "$1-"。跨度>
    【解决方案2】:

    mystring.replace(/([^,])\s+/i "$1-");有更好的方法,但我记不住语法

    【讨论】:

    • 我相信你想要g 标志,而不是i 标志。首先,没有字符不区分大小写,其次,没有g 标志,它只会替换第一个匹配项。另外,你忘记了逗号=)
    【解决方案3】:

    [^,] = 不是逗号

    编辑抱歉,之前没有注意到替换。我现在更新了我的答案:

    var exp = new RegExp("([^,]) ");
    tags = tags.replace(exp, "$1-");
    

    【讨论】:

      【解决方案4】:
      text.replace(/([^,]) /, '$1-');
      

      【讨论】:

        【解决方案5】:

        不幸的是,Javascript 似乎不支持负面的lookbehinds,所以你必须使用这样的东西(修改自here):

        var output = 'tag, tag2, longer tag, tag3'.replace(/(,)?t/g, function($0, $1){
            return $1 ? $0 : '-';
        });
        

        【讨论】:

        • 我不知道你可以放一个“。”在javascript中的字符串文字之后。很高兴知道,谢谢!
        【解决方案6】:

        [^,] - 第一个字符不是逗号,第二个字符是空格,它会搜索那种字符串

        【讨论】:

        • 对不起,这可能不在javascript中
        【解决方案7】:
        ([a-zA-Z] ){1,}
        

        也许?未测试。类似的东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多