使用点表示法对变量进行JavaScript连续split()

时间:2015-09-21 00:09:22

标签: javascript regex split built-in

我有这个变量:

var myVar = "r.object.subobject.variable";

我想添加每个"等级"这个字符串的数组。我的数组将包含:

"r.object"
"r.object.subobject"
"r.object.subobject.variable"

我知道我可以使用JavaScript的split()函数和RegEx,但是我一直使用它返回整个字符串。例如,我正在尝试:

var myArray = myVar.split(/r[.].+/);

因此,myArray[0]始终为"r.object.subobject.variable"

如何制作myArray[0] = "r.object"myArray[1] = "r.object.subobject"myArray[2] = "r.object.subobject.variable"

希望我只是误解正则表达式是如何工作的,而不是仅仅通过分离句点来进行某种人为的递归或数组连接。

其他限制和背景信息

  • 我检查的变量的深度可以从1到未知数,因此任何函数都应该尝试确定要提取的字符串数。所有字符串将始终以r.开头(我为此设置了一个while循环,虽然它将在给定深度上正确匹配,但拆分仍然失败。)
  • 此操作将在数千或数万个字符串上发生,因此速度很重要。
  • 我知道括号表示法是一个东西,但我不能将它用于我的目的。 (数组元素最终会回到一个专门的AS3应用程序,它并不能很好地与它一起使用。)

2 个答案:

答案 0 :(得分:2)

实际上,myArray[0]应该返回一个空字符串。表达式/r[.].+/匹配整个字符串,因此返回匹配之后和之前的所有内容(空字符串)。注意.+匹配任何重复一次或多次的char:

r.object.subobject.variable
--^                       ^      [1]: matched by r[.]
1 |           2           |
  +------------------------      [2]: matched my .+

如果您想按点分开(" ."),请使用:

var myArray = myVar.split(/[.]/);

编辑至于更新后的问题,正则表达式只能匹配文本的一部分一次

要实现您尝试执行的操作,请执行以下代码:



var myVar = "r.object.subobject.variable";
var mySplit = myVar.split(".");
var myArray = Array();

for (i = 2; i <= mySplit.length; i++) { 
    myArray.push(mySplit.slice(0,i).join("."));
}


document.write(myArray);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

尝试将.split()RegExp /\./do.. while循环,Array.prototype.slice()Array.prototype.join()Array.prototype.splice()

一起使用

var myVar = "r.object.subobject.variable";
var arr = myVar.split(/\./),
  len = arr.length,
  i = 0,
  myArray = [];
do {
  myArray.push(arr.slice(0, i).join("."));
  ++i;
} while (myArray.length <= len);
myArray.splice(0, 2);
console.log(myArray);