我希望在 JS 中创建一个 reg ex,它从字符串中获取 2 个值:
该字符串始终采用以下格式value1[value2]
。
做这个的最好方式是什么?
var str = "value1[value2]";
var match = str.match(/([^\[]*)\[([^\]]*)\]/);
// match = ["value1[value2]", "value1", "value2"]
解释
([^\[]*)
: 捕捉到[
角色之前的一切。\[
:[
性格。([^\]]*)
: 捕捉到]
角色之前的一切。\]
:]
性格。var str = "value1[value2]";
var arr = str.split('[');
var value1 = arr[0];
var value2 = arr[1].substr(0, arr[1].length -1);
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)];
}
我认为最易读的正则表达式将类似于以下内容:
str.match(/(.+?)([?)(.+?)(]?)/)
简单地返回您感兴趣的结果。亚历山大的回答肯定会奏效,但我个人发现过度使用括号和斜线很难阅读。