Javascript 重复捕获组
我有一个包含零个或多个数字的字符串,然后是零个或多个字符。我想将数字解析为一个组,然后将所有字符分解为每个字符的单独组。我试过:Javascript 重复捕获组,javascript,regex,Javascript,Regex,我有一个包含零个或多个数字的字符串,然后是零个或多个字符。我想将数字解析为一个组,然后将所有字符分解为每个字符的单独组。我试过: ([0-9]*)([ABCD])*:正确捕获数字,但仅捕获最后一个字母 ([0-9]*)([ABCD])*):正确捕获数字,但首先捕获一组中的所有字母,然后仅捕获一组中的最后一个字母 我理解为什么会出现这些结果,但我不知道如何解决它。如何更改正则表达式以为匹配的字符提供多个组?如果我没有得到一个空组('或未定义的组),如果数字或字母不在那里,我将获得加分 例如: 1A
([0-9]*)([ABCD])*
:正确捕获数字,但仅捕获最后一个字母
([0-9]*)([ABCD])*)
:正确捕获数字,但首先捕获一组中的所有字母,然后仅捕获一组中的最后一个字母
我理解为什么会出现这些结果,但我不知道如何解决它。如何更改正则表达式以为匹配的字符提供多个组?如果我没有得到一个空组('
或未定义的组
),如果数字或字母不在那里,我将获得加分
例如:
1A
=>[1,A]
99
=>[99]
CAB
=>[C,A,B]
1234ABCD
=>[1234,A,B,C,D]在组捕获内放置星号。星号表示0或更多,所以您试图从组捕获中捕获0或更多符号,在这种情况下,您的结果只是第一个捕获的字母。但是你需要0个或更多的字母
([0-9]*)([ABCD]*)
([0-9]*)([A-D]*) //same thing
//更新
var match = "".match(/([0-9]*)([ABCD]*)/)
此代码将返回具有三个位置的数组:
JavaScript没有“全部匹配”的内置方法。因为您提前知道所有字母都将是第二个匹配,所以您可以自己拆分这些字母:
var matches = "1234ABCD".match(/([0-9]*)([ABCD]*)/).slice(1);
matches = [matches[0]].concat(matches[1].split(""));
var test=document.getElementById('test');
功能重新测试(){
变量re=/\b([0-9]*)([ABCD]*)\b/g;
var str=测试值;
var发现=”;
str.replace(re,函数(完全匹配,数字,字母){
if(fullmatch==“”)返回;
字母=字母。拆分(“”);
找到+=“”+数字+“”
找到+=“”+个字母+“\n”
});
document.getElementById('result').innerHTML=found;
}
重新测试()代码>
span.num{
颜色:红色;
}
span.字母{
颜色:蓝色;
}
123ABC
阿尔法
12345defg
好极了
驾驶室
19
9876vwxyz
...?
测试
请允许我提出一个新策略:不要尝试一次匹配整个字符串,而是将每个数字或字符与匹配一次以返回所有匹配项
Regex
/^\d+|[ABCD]/g
^\d+
匹配字符串开头的整数
|
…或
[ABCD]
4个允许字符中的1个
代码
subject=“1234ABCD”;
模式=/^\d+|[ABCD]/g;
匹配=主题。匹配(模式);
console.log(匹配项);
//=>[“1234”、“A”、“B”、“C”、“D”]
正则表达式如何知道每个组的长度?我们可以有测试输入字符串和测试输出结果吗?当然,我会添加一些示例扫描您运行两个单独的匹配函数吗?我可以,但我希望可以用一个regext完成。这将把字母放在一个捕获组中,而不是每个字母都放在自己的组中