【问题标题】:match everything before and match everything after a certain character [duplicate]匹配之前的所有内容并匹配某个字符之后的所有内容[重复]
【发布时间】:2011-03-12 20:33:39
【问题描述】:

我需要一个正则表达式来匹配之前的所有内容,一个匹配某个字符之后的所有内容,例如冒号。

 foo:bar

匹配 'foo' 的东西和匹配 'bar' 的东西。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    不要为此使用正则表达式。使用split

    【讨论】:

    • split 如果值有 : 将失败。
    • 它不会返回整个值。
    • @SLaks 您还必须向":" 提供split 参数:)
    • SLaks 想说的是,如果: 之后的字符串部分还包含冒号,则结果将包含 3 个子字符串。这不符合问题的标准,“我需要一个正则表达式来匹配之前的所有内容,一个来匹配 某个字符之后的所有内容,比如冒号”。但是,OP 很可能有点天真地指定了该要求,split 对他来说已经足够了:-)
    【解决方案2】:

    在正则表达式中,您可以定义组(通过括号)。

    "foo:bar".match(/(.*?):(.*)/) // -> ["foo:bar", "foo", "bar"]
    //                               whole regexp, 1st group, 2nd group
    

    .*? in first group 表示 non-greedy 版本的.*,这可以防止它吃掉所有的字符串(尽可能少匹配.'s)

    (在这种情况下确实无关紧要,但在匹配时很重要,例如“foo:bar:spam”)

    【讨论】:

      【解决方案3】:

      这里不需要正则表达式。

      var middle = str.indexOf(':');
      var key = str.substr(0, middle);
      var value = str.substr(middle + 1);
      

      如果你确实想使用正则表达式,你可以这样做:

      var matches = /([^:]+):(.+)/.exec(str);
      
      var key = matches[1];
      var value = matches[2];
      

      【讨论】:

      • +1 用于满足冒号前后所有内容的标准 :-)
      【解决方案4】:

      这两个应该这样做:

      'foo:bar'.match(/(.*):/)
      'foo:bar'.match(/:(.*)/)
      

      字符串中会有多个“:”吗?如果是这样,您可能更喜欢这个:

      'foo:bar'.match(/(.*?):/)
      

      【讨论】:

        【解决方案5】:

        如果你想使用正则表达式而不是 str.split,你可以使用:

        var str="foo:bar";
        var pattern=/([^:]+):([^:]+)/gi;
        var arr=pattern.exec(str);
        arr.shift();
        

        现在 arr 将是一个包含两个元素的数组:['foo', 'bar']。

        【讨论】:

          【解决方案6】:

          你想要向前看,向后看。哪些匹配内容后面是某个字符,或者前面是某个字符,但在匹配中不包括该字符。

          对于前瞻,你会有类似 .*(?=:) 的东西,这意味着任何字符,0 次或更多次,后跟一个冒号,但不要在匹配中包含冒号,

          对于后视,你有 .*(?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-09-25
            • 2022-06-28
            • 1970-01-01
            • 2017-02-01
            • 2018-07-03
            • 1970-01-01
            • 1970-01-01
            • 2012-12-25
            相关资源
            最近更新 更多