最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Separate characters and numbers from a string - Stack Overflow

programmeradmin9浏览0评论

I have a string variable that contain character and numbers like this

var sampleString = "aaa1211"

Note that variable always start with a character/s and end with number/s. Character and number size is not fixed. It could be something like followings

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

I need to separate the characters and numbers and assign them into separate variables.

How could I do that ?

I try to use split and substring but for this scenario I couldn't apply those. I know this is a basic question but i'm search over the internet and I was unable to find an answer.

Thank you

I have a string variable that contain character and numbers like this

var sampleString = "aaa1211"

Note that variable always start with a character/s and end with number/s. Character and number size is not fixed. It could be something like followings

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

I need to separate the characters and numbers and assign them into separate variables.

How could I do that ?

I try to use split and substring but for this scenario I couldn't apply those. I know this is a basic question but i'm search over the internet and I was unable to find an answer.

Thank you

Share Improve this question edited Jun 17, 2016 at 5:17 SLePort 15.5k3 gold badges39 silver badges45 bronze badges asked Jun 17, 2016 at 4:42 Sachila RanawakaSachila Ranawaka 41.4k8 gold badges61 silver badges87 bronze badges
Add a ment  | 

9 Answers 9

Reset to default 7

Please use [A-Za-z] - all letters (uppercase and lowercase) [0-9] - all numbers

        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

A shorter solution if the string always starts with letters and ends with numbers as you say:

var str = 'aaaaa12111';

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

console.log(chars, numbs);

You can use it in a single regex,

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

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

this will give you both the text and number.

Using Match

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

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

The above will work even if your string starts with digits.

Using Split

with Positive lookbehind (?<=) and Positive lookahead (?=):

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

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

where \D stands for not a digit and \d for digit.

Use isNaN() to differentiate

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

If you're like me, you were looking to separate alphabets and numbers, no matter what their position is, Try this:

var separateTextAndNum = (x) => {
    var textArray = x.split('')
    var text = []
    var num = []
    textArray.forEach(t=>{
        if (t>-1) {
            num.push(t)
        } else {
            text.push(t)
        }
    })
    return [text, num]
}

For ex - if you try this:

separateTextAndNum('abcd1234ava') // result [["a","b","c","d","a","v","a"],["1","2","3","4"]]

This isn't beautiful but it works.

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];
}

Essentially just looping through the string until you find a number and you split it at that index. Returning a tuple with your letters and numbers. So when you run it you can do something like this:

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

A functional approach...

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"]

You can loop through the string length, check it & add to the variable.

It is not clear if you want to assign each of the character to a variable or all alphabets to one variable & integers to another.

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

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

发布评论

评论列表(0)

  1. 暂无评论