【问题标题】:Regex to match more possibilities (javascript)正则表达式匹配更多可能性(javascript)
【发布时间】:2013-12-06 15:24:48
【问题描述】:

这个正则表达式(用于 base64):

/[a-zA-Z0-9/+]{5}/g

将匹配字符串中的每 5 个字符。所以如果我有:

"19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAw"

匹配项是:

  1. 19jZ2
  2. uLj5O
  3. Xm5+j
  4. p6vLz
  5. 9PX29
  6. /j5+v
  7. /aAAw

我将如何编写会导致以下匹配的正则表达式?

  1. 19jZ2
  2. 9jZ2u
  3. jZ2uL
  4. Z2uLj
  5. 2uLj5
  6. uLj5O
  7. 等等……

(^从字面上看,字符串中每个可能的 5 个连续字符)

【问题讨论】:

  • 你并不是在寻找一个正则表达式,而是一个简单的循环 -> jsfiddle.net/Fg9mG
  • 这是个好主意。我所做的一项更改是“i
  • 请注意,您的正则表达式也会匹配逗号。
  • 谢谢 ^ 我编辑了操作。

标签: javascript regex string char base64


【解决方案1】:

这个怎么样:

"19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAw".split('').map(function(elm, i, arr) { 
    return arr.slice(i,i+5).join('') }
).slice(0,-4)

【讨论】:

    【解决方案2】:

    一个简单的([a-zA-Z0-9+\/]{5}) 可以为这个特定的输入做到这一点

    Live DEMO

    或者(?:"|\G(?<!^))([a-zA-Z0-9+\/]{5}|[a-zA-Z0-9+\/]+)(?=.*?"),如果你的字符串在引号之间

    Live DEMO

    或者(?:"|\G(?<!^))([a-zA-Z0-9+\/]{5})(?=(?:[a-zA-Z0-9+\/]{5})*"),如果你的字符串数正好是 5 的倍数

    Live DEMO

    【讨论】:

    • 我不是在寻找非空白字符。我正在使用 base64 中的所有字符(正如我在原帖中提到的),它们是 [a-z,A-Z,0-9,+,/]。
    • @user1868084,那么您只需将\S 替换为[a-zA-Z0-9+\/]...答案已更新...
    【解决方案3】:

    这是一个建议:

    function split(s) {
        var allowed = /^[a-z\d/+]{5}/i,
            result = [],
            match;
        while (s.length > 4) {
            match = s.match(allowed);
            match && result.push(match[0]);
            s = s.substr(1); // removes first char
        }
        return result;
    }
    

    正则表达式查找每个循环的前五个字符:

    split('19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAw'); // ['19jZ2', '9jZ2u', ...]
    split('19jZ2=uLj5OXm5+jp6vLz9PX29/j5+v/aAAw'); // ['19jZ2', 'uLj5O', ...]
    

    【讨论】:

      【解决方案4】:

      基于 adeneo 的评论:

      var result = [],
          s = '19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAw';
      while (s.length > 4) {
          result.push(s.substr(0, 5));
          s = s.substr(1);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多