将人[0] .email拆分为['person','0','email']

时间:2015-12-07 08:15:46

标签: javascript regex

我不知道以前是否曾经问过,因为英语不是我的第一语言,我不知道要搜索的关键词。

所以基本上我有以下输入元素,

<input type="email" name="person[0].email" />

我想将名称拆分为3个部分,例如["person", "0", "email"]

我尝试使用/(\[[^[\]]])|\./,但它提供了["person", "[0]", "", undefined, "email"]。 另外,对于a[0][1].b[3].c,它应输出["a", "0", "1", "b", "3", "c"]

4 个答案:

答案 0 :(得分:5)

您可以使用.match代替.split

&#13;
&#13;
console.log("person[0].email".match(/\w+/g));
&#13;
&#13;
&#13;

注意感谢 @npinti):如果名称中的_,我的第一个示例也会匹配_ ,所以在这种情况下你需要像这样使用正则表达式

&#13;
&#13;
    console.log("person[0].email".match(/[A-Za-z0-9]+/g));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

好像你想打破任何不是字母或数字的东西,因此你可以使用它:[^A-Za-z0-9]+。表达式的示例可用here

答案 2 :(得分:0)

您可以使用此拆分:

var m = person[0].email".split(/[.\[\]]+/g)
//=> ["person", "0", "email"]

OR:

m = "a[0][1].b[3].c".split(/[.\[\]]+/g)
//=> ["a", "0", "1", "b", "3", "c"]

答案 3 :(得分:0)

如果您始终使用以下格式:name[i].prop,则可以在没有正则表达式的情况下执行此操作:

function splitName(s)
{
  var parts1 = s.split('].');
  var parts2 = parts1[0].split('[');

  return [parts2[0], parts2[1], parts1[1]];
}

document.body.innerHTML += JSON.stringify(splitName('name[i].prop')) + '<br/>';
document.body.innerHTML += JSON.stringify(splitName('person[0].email')) + '<br/>';
document.body.innerHTML += JSON.stringify(splitName('a[0].b')) + '<br/>';

它不太优雅,不是通用的,仅适用于指定的格式。但是,没有正则表达式,如果你只使用这种格式 - 那为什么不呢? :)