【问题标题】:Javascript split with regular expression return empty values [duplicate]用正则表达式拆分的Javascript返回空值[重复]
【发布时间】: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


【解决方案1】:
var myString = 'a12';
var list = /^([a-zA-Z]{1,2})([0-9]{1,2})$/.exec(myString).concat();
list.shift();    // remove the first element
console.log(list); //This is the list that you want

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2014-03-24
    • 2018-11-08
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多