简体   繁体   中英

Most efficient way to extract parts of string

I have a bunch of strings in the format 'TYPE_1_VARIABLE_NAME'.

The goal is to get 3 variables in the form of:

varType = 'TYPE',
varNumber = '1',
varName = 'VARIABLE_NAME'

What's the most efficient way of achieving this?

I know I can use:

var firstUnderscore = str.indexOf('_')
varType = str.slice(0, firstUnderscore))
varNumber = str.slice(firstUnderscore+1,firstUnderscore+2)
varName = str.slice(firstUnderscore+3)

but this feels like a poor way of doing it. Is there a better way? RegEx?

Or should I just rename the variable to 'TYPE_1_variableName' and do a:

varArray = str.split('_')

and then get them with:

varType = varArray[0],
varNumber = varArray[1],
varName = varArray[2]

Any help appreciated. jQuery also ok.

Regex solution

Given that the first and second underscores are the delimiters, this regex approach will extract the parts (allowing underscores in the last part):

//input data
var string = 'TYPE_1_VARIABLE_NAME';

//extract parts using .match()
var parts = string.match(/([^_]+)_([^_]+)_([^$]+)/);

//indexes 1 through 3 contains the parts
var varType = parts[1];
var varNumber = parts[2];
var varName = parts[3];

Given that the first variable consists of characters and the second of digits, this more specific regex could be used instead:

var parts = string.match(/(\w+)_(\d)_(.+)/);

Non-regex solution

Using .split('_') , you could do this:

//input data
var string = 'TYPE_1_VARIABLE_NAME';

//extract parts using .split()
var parts = string.split('_');

//indexes 0 and 1 contain the first parts
//the rest of the parts array contains the last part
var varType = parts[0];
var varNumber = parts[1];
var varName = parts.slice(2).join('_');

In matters of efficiency, both approaches contain about the same amount of code.

You could use regex and split

 var string='TYPE_1_VARIABLE_NAME'; var div=string.split(/^([AZ]+)_(\\d+)_(\\w+)$/); console.log('type:'+div[1]); console.log('num:'+div[2]); console.log('name:'+div[3]); 

Here's an answer I found here :

var array = str.split('_'),
    type = array[0], number = array[1], name = array[2];

ES6 standardises destructuring assignment, which allows you to do what Firefox has supported for quite a while now:

var [type, number, name] = str.split('_');

You can check browser support using Kangax's compatibility table .

Here's a sample Fiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM