提取部分字符串的最有效方法

时间:2016-08-26 18:53:35

标签: javascript jquery split

我有一堆字符串格式为' TYPE_1_VARIABLE_NAME'。

目标是以以下形式获得3个变量:

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

实现这一目标的最有效方法是什么?

我知道我可以使用:

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

但这感觉就像是一种糟糕的做法。有没有更好的办法?正则表达式?

或者我应该将变量重命名为' TYPE_1_variableName'并做一个:

varArray = str.split('_')

然后让他们:

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

任何帮助表示赞赏。 jQuery也好。

3 个答案:

答案 0 :(得分:2)

正则表达式解决方案

鉴于第一个和第二个下划线是分隔符,这个正则表达式方法将提取部分(在最后一部分中允许下划线):

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

鉴于第一个变量由字符和第二个数字组成,可以使用这个更具体的正则表达式:

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

非正则表达式解决方案

使用.split('_'),您可以这样做:

//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('_');

在效率方面,两种方法都包含大约相同数量的代码。

答案 1 :(得分:1)

您可以使用正则表达式和split



var string='TYPE_1_VARIABLE_NAME';

var div=string.split(/^([A-Z]+)_(\d+)_(\w+)$/);

console.log('type:'+div[1]);
console.log('num:'+div[2]);
console.log('name:'+div[3]);




答案 2 :(得分:0)

以下是我找到的答案here

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

ES6标准化解构分配,它允许你现在支持Firefox已经支持了很长一段时间:

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

您可以使用Kangax的compatibility table检查浏览器支持。

以下是Fiddle

的示例