从字符串中分隔字符和数字

时间:2016-06-17 04:42:55

标签: javascript string

我有一个包含字符和数字的字符串变量

var sampleString = "aaa1211"

请注意,变量始终以character/s开头,以number/s结尾。字符和数字大小不固定。它可能类似于以下

var sampleString = "aaaaa12111"
var sampleString = "aaa12111"

我需要将字符和数字分开,并将它们分配给单独的变量。

我怎么能这样做?

我尝试使用split和substring但是在这种情况下我无法应用它们。我知道这是一个基本问题,但我在互联网上搜索,我无法找到答案。

谢谢

8 个答案:

答案 0 :(得分:2)

请使用 [A-Za-z] - 所有字母(大写和小写) [0-9] - 所有数字

        function myFunction() {
        var str = "aaaaAZE12121212";
        var patt1 = /[0-9]/g;
        var patt2 = /[a-zA-Z]/g;
        var letters = str.match(patt2);
        var digits = str.match(patt1);
        document.getElementById("alphabets").innerHTML = letters;
     document.getElementById("numbers").innerHTML = digits;
    }

Codepen - http://codepen.io/nagasai/pen/pbbGOB

答案 1 :(得分:1)

您可以在单个正则表达式中使用它,

var st = 'red123';
var regex = new RegExp('([0-9]+)|([a-zA-Z]+)','g');
var splittedArray = st.match(regex);

var text = splittedArray[0];
var num = splittedArray[1];

这将为您提供文字和数字。

答案 2 :(得分:1)

如果字符串始终以字母开头并以数字结尾,则为更短的解决方案:

var str = 'aaaaa12111';

var chars = str.slice(0, str.search(/\d/));
var numbs = str.replace(chars, '');

console.log(chars, numbs);

答案 3 :(得分:0)

这不美观但有效。

function splitLettersAndNumbers(string) {
  var numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  var numbers, letters, splitIndex;

  for (var i = 0; i < string.length; i++) {
    if (numbers.indexOf(string[i]) > -1) {
      letters = string.substring(0, i);
      numbers = string.substring(i);
      return [letters, numbers];
    }
  }

  // in the chance that you don't find any numbers just return the initial string or array of the string of letters
  return [string];
}

基本上只是循环遍历字符串,直到找到一个数字并将其拆分为该索引。用你的字母和数字返回一个元组。因此,当你运行它时,你可以这样做:

var results = splitLettersAndNumbers(string);
var letters = results[0];
var numbers = results[1];

答案 4 :(得分:0)

你可以遍历字符串长度,检查它和&amp;添加到变量。

目前尚不清楚是否要将每个字符分配给变量或所有字母表分配给一个变量&amp;整数到另一个。

var sampleString = "aaa12111"
var _num="";
var _alp="";

for(var i=0;i<sampleString.length;i++){
  if(isNaN(sampleString[i]) ===true){
    _num+=sampleString[i];
  }
  else{
  _alp+=sampleString[i];
  }
}
console.log(_num ,_alp)

JSFIDDLE

答案 5 :(得分:0)

使用isNaN()来区分

var sampleString = "aaa1211"  
var newnum =""
var newstr =""
for(var i=0;i<sampleString.length;i++){
 if(isNaN(sampleString[i])){

 newstr = newstr+sampleString[i]

   }else{

  newnum= newstr+sampleString[i]
  }

  }


  console.log(newnum) //1121
  console.log(newstr) //aaa

答案 6 :(得分:0)

功能性方法......

&#13;
&#13;
var sampleString = "aaaaa12111";

var seperate = sampleString.split('').reduce(function(start , item){
  Number(item) ? start[0] += item : start[1] += item;
  return start
},['',''])

console.log(seperate) //["12111", "aaaaa"]
&#13;
&#13;
&#13;

答案 7 :(得分:0)

使用匹配

const str = "ASDF1234";
const [word, digits] = str.match(/\D+|\d+/g);

console.log(word);    // "ASDF"
console.log(digits);  // "1234"

即使您的字符串以数字开头,上述内容也能正常工作。

使用拆分

具有正向后视 (?<=) 和正向前瞻 (?=)

const str = "ASDF1234";
const [word, digits] = str.split(/(?<=\D)(?=\d)/);

console.log(word);    // "ASDF"
console.log(digits);  // "1234"

其中\D代表非数字\d代表数字 .