如何匹配由一个字符拆分的多个子字符串
How to match multiple substrings splitted by a character?
假设我有以下字符串:aaa.bbb.ccc.ddd.eee
。除了最后一次出现外,我想在每次出现时按.
字符拆分此字符串。换句话说,我希望我的结果如下:
[
"aaa.bbb.ccc.ddd.eee",
"bbb.ccc.ddd.eee",
"ccc.ddd.eee",
"ddd.eee"
]
我只能通过多个显式循环来实现这一点,但如果可能的话,我想避免这种情况。我不是JavaScript大师,也许有一些功能我不知道,这可能会有所帮助。使最终解决方案更短、更简单。
有多种方法可以做到这一点,但这里有一种方法只有一个循环:
function splitAndJoin(val) {
var retVal = [];
val = val.split('.');
while(val.length > 1) {
retVal.push(val.join('.'));
val.shift();
}
return retVal;
}
用法:
splitAndJoin('aaa.bbb.ccc.ddd.eee')
结果:
[
"aaa.bbb.ccc.ddd.eee",
"bbb.ccc.ddd.eee",
"ccc.ddd.eee",
"ddd.eee"
]
示例fiddle
一个单个循环就足够了:
var string = "aaa.bbb.ccc.ddd.eee",
result = [],
regex = /[^.]*'./g,
m;
while (m = regex.exec(string))
result.push(string.slice(m.index));
然而,我认为使用regex完全是高估了这一点,使用标准字符串split
方法就足够了。通过使用数组迭代方法,您甚至可以绕过编写显式循环:
var string = "aaa.bbb.ccc.ddd.eee";
return string.split(".") // ["aaa","bbb","ccc","ddd","eee"]
.map(function(_, i, parts) { // for each index
return parts.slice(i); // make an array with a different length
}).filter(function(p) {
return p.length >= 2; // take only the arrays with at least two parts
}).map(function(p) {
return p.join("."); // make a string from each of those arrays
});
正如@dc5所说,有多种方法可以做到这一点。您可能使用了多个(嵌套)循环,因为您不知道Array slice
和join
方法,当然它们在内部对数组进行循环。
相关文章:
- 通过跳过拆分字符在 javascript 中拆分字符串
- jQuery字符串使用split()方法在空格后拆分字符串
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 如何在JavaScript中按大小写拆分字符串
- 根据上次出现的、和_拆分字符串
- 拆分字符串数组(JavaScript)后未定义
- 在空行上拆分字符串
- 使用Regex拆分字符串,保留分隔符
- 使用jquery或regex,带点但不带点的拆分字符串位于单引号中
- Nashorn和Rhino:使用空白regexp拆分字符串
- Javascript:不使用.split()方法拆分字符串
- 如何使用正则表达式在javascript中拆分字符串
- Javascript在第一个空格上拆分字符串
- 首次出现时拆分字符串
- 如何使用正则表达式(.match())拆分字符串
- 使用正则表达式拆分字符串
- Javascript:拆分字符串,但仅使用 1 个结果
- Angularjs-拆分字符串问题
- angularjs在拆分字符串时解析语法错误
- 基于javascript中的AND OR逻辑拆分字符串