我有这个变量:
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"
?
希望我只是误解正则表达式是如何工作的,而不是仅仅通过分离句点来进行某种人为的递归或数组连接。
其他限制和背景信息
r.
开头(我为此设置了一个while循环,虽然它将在给定深度上正确匹配,但拆分仍然失败。)答案 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;
答案 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);