正则表达式匹配更多的可能性(javascript)

时间:2013-11-21 22:19:09

标签: javascript regex string char base64

此正则表达式(适用于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
  8. 我如何编写导致以下匹配的正则表达式?

    1. 19jZ2
    2. 9jZ2u
    3. jZ2uL
    4. Z2uLj
    5. 2uLj5
    6. uLj5O
    7. 等......
    8. (^字面上字符串中每个可能的5个连续字符)

4 个答案:

答案 0 :(得分:3)

这个怎么样:

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

答案 1 :(得分:1)

基于adeneo的评论:

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

答案 2 :(得分:0)

这是一个建议:

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', ...]

答案 3 :(得分:-3)

一个简单的([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