我希望在JS中创建一个从字符串中获取2个值的注册表:
字符串始终采用以下格式value1[value2]
。
这样做的最佳方式是什么?
答案 0 :(得分:5)
var str = "value1[value2]";
var match = str.match(/([^\[]*)\[([^\]]*)\]/);
// match = ["value1[value2]", "value1", "value2"]
<强>解释强>
([^\[]*)
:捕获所有内容,直到[
字符。\[
:[
字符。([^\]]*)
:捕获所有内容,直到]
字符。\]
:]
字符。答案 1 :(得分:0)
var str = "value1[value2]";
var arr = str.split('[');
var value1 = arr[0];
var value2 = arr[1].substr(0, arr[1].length -1);
答案 2 :(得分:0)
function getValues(str) {
var m = (''+str).match(/^(.*?)\[(.*?)\]$/);
return (m) ? [m[1], m[2]] : null;
}
getValues('value1[value2]'); // => ["value1", "value2"]
getValues('foobar'); // => null
当然,如果您确定您的输入已经过验证,那么您只需按索引提取值,这应该是最快的:
function getValues2(str) {
var idx = str.indexOf('[');
return [str.substr(0, idx), str.substr(idx+1, str.length-idx-2)];
}
答案 3 :(得分:0)
我认为最可读的正则表达式将是:
str.match(/(.+?)([?)(.+?)(]?)/)
简单地返回你感兴趣的结果。亚历山大的答案肯定会有用,但我个人觉得过多使用括号和斜线很难阅读。