JavaScript:仅按字符拆分字符串或按字符+数字(如果存在)拆分

时间:2015-02-20 16:42:09

标签: javascript

如何按字符或字符+数字(如果存在)拆分JavaScript字符串?

示例:

只是字符:

var items = "asdaasf";
//I am using
items.split('');

这样就可以了。

现在,如果我有数字:

var items = "a2sdaa5sf";

我希望它分成数组,所以我的结果如下:

[a2,s,d,a,a5,s,f]

如果字母后跟一个数字,则计为1个字符。

我会使用正则表达式吗?语法是什么?我对RegEx不太熟悉。

4 个答案:

答案 0 :(得分:1)

在以下字符为字母的每个位置拆分。这可以使用lookahead

来完成
> "a2sd12a3".split(/(?=[a-z])/i)
["a2", "s", "d12", "a3"]

答案 1 :(得分:1)

如果您只想按字符或字符后跟数字

拆分
var reg =  /([a-z]\d*)/g;
var myString = 'something'
myString.match(reg)

@Felix Kling的回答在前瞻时更加优雅,但如果你想坚持最简单,假设它始终以角色开头。

答案 2 :(得分:1)

为了补充@ FelixKling的答案,不依赖于正则表达式,您可以非常轻松地重现逻辑:

var input = "a1b2c3de45f6gh78i9j0";

var chunks = [];
var accum = "";
var lastWasDigit = false;
var isDigitRex = /[0-9]/;

Array.from(input).forEach(function (i) {
  var isDigit = isDigitRex.exec(i);
  if (lastWasDigit && !isDigit) {
    chunks.push(accum);
    accum = "" + i;
  } else {
    accum += i;
  }
  lastWasDigit = isDigit;
})

console.log(chunks);

答案 3 :(得分:1)

Abraham Adam 相似的方法,但通过使用以下正则表达式更新为包含不区分大小写:/[a-z]\d*/ig

var regexVal = /[a-z]\d*/ig;

var test1 = "asdaasf";
var test2 = "a2sdaa5sf";
var test3 = "a2sd12a3";
var test4 = "a1b2c3de45f6gh78i9j0";
var test5 = "a1b2c3De45f6gH78I9j0";

console.log(test1.match(regexVal));  // ["a", "s", "d", "a", "a", "s", "f"]
console.log(test2.match(regexVal));  // ["a2", "s", "d", "a", "a5", "s", "f"]
console.log(test3.match(regexVal));  // ["a2", "s", "d12", "a3"]
console.log(test4.match(regexVal));  // ["a1", "b2", "c3", "d", "e45", "f6", "g", "h78", "i9", "j0"]
console.log(test5.match(regexVal));  // ["a1", "b2", "c3", "D", "e45", "f6", "g", "H78", "I9", "j0"]