我有一堆字符串格式为' 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也好。
答案 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
的示例