【发布时间】:2019-09-09 14:48:15
【问题描述】:
您好,我必须将字符串分成两部分,第一部分始终是字符,第二部分是数字。 IE。 a12 c4
我尝试使用这个表达式:
var myString = 'a12';
var mySplits = myString.split(/^([a-zA-Z]{1,2})([0-9]{1,2})$/);
console.log(mySplits);
预期的数组是:
["a", "12"]
结果是:
["", "a", "12", ""]
我不明白为什么结果数组在开始和结束时都有一个空值。
非常感谢任何帮助。
更新
建议的解决方案可行,但我们可以使用更优雅的方式。
ES18
在 ES18 中,我们可以使用组捕获名称
var myString = 'a12';
var matches =
/^(?<letter>[a-zA-Z]{1,2})(?<number>[0-9]{1,2})$/.exec(myString).concat();
console.log(matches.groups.letter);
console.log(matches.groups.number);
ES10
ES10 添加了返回 Iterator 的方法 .matchAll(),因此如果不需要捕获单个值而是全局捕获,此方法可能很有用。
var myString = 'a12 b12 ';
for (const match of myString.matchAll(/(?<letter>[a-zA-Z]{1,2})(?<number>[0-9]{1,2})/g)) {
console.log(match.groups.letter);
console.log(match.groups.number);
}
【问题讨论】:
-
那是因为您使用的是
split并且您的整个正则表达式都匹配输入。为什么不使用 match 而不是^([a-zA-Z]{1,2})([0-9]{1,2})$/
标签: javascript regex split