Regex匹配更多可能性(javascript)

Regex to match more possibilities (javascript)

本文关键字:javascript 可能性 Regex      更新时间:2023-09-26

此正则表达式(用于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个连续字符)

这个怎么样:

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

基于adeneo的评论:

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

这里有一个建议:

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

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

现场演示

如果字符串位于引号之间,则为(?:"|'G(?<!^))([a-zA-Z0-9+'/]{5}|[a-zA-Z0-9+'/]+)(?=.*?")

现场演示

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

现场演示