简体   繁体   English

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

[英]Regex to match more possibilities (javascript)

This regex (for base64): 此正则表达式(用于base64):

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

Would match every 5 characters in a string. 将匹配字符串中的每5个字符。 So if I have: 所以,如果我有:

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

the matches are: 匹配项是:

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

How would I write a regex that would result in the following matches? 我将如何编写一个正则表达式,导致以下匹配?

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

(^Literally every possible 5 consecutive characters in the string) (^从字面上看,字符串中可能的每5个连续字符)

How about this: 这个怎么样:

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

Based on adeneo's comment : 根据adeneo的评论:

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

Here is a suggestion : 这是一个建议:

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;
}

The regex looks for the first five chars for each loop : 正则表达式为每个循环查找前五个字符:

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

A simple ([a-zA-Z0-9+\\/]{5}) could do it for this specific input 一个简单的([a-zA-Z0-9+\\/]{5})可以针对此特定输入执行此操作

Live DEMO 现场演示

Or (?:"|\\G(?<!^))([a-zA-Z0-9+\\/]{5}|[a-zA-Z0-9+\\/]+)(?=.*?") if your string is between quotes (?:"|\\G(?<!^))([a-zA-Z0-9+\\/]{5}|[a-zA-Z0-9+\\/]+)(?=.*?")如果您的字符串在引号之间

Live DEMO 现场演示

Or (?:"|\\G(?<!^))([a-zA-Z0-9+\\/]{5})(?=(?:[a-zA-Z0-9+\\/]{5})*") if your string count is exactly a multiple of 5 (?:"|\\G(?<!^))([a-zA-Z0-9+\\/]{5})(?=(?:[a-zA-Z0-9+\\/]{5})*")如果您的字符串数恰好是5的倍数

Live DEMO 现场演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM