只在某些位置拆分数组,而不在其他位置拆分
Splitting an array at only certain places but not others
我非常了解.split()
函数。但我似乎能弄清楚的是,如何在某些地方分裂,而不是在其他地方分裂。听起来很困惑?例如,我的意思是,假设我在以下字符串上使用.split(",")
:
div:(li,div),div
有没有可能把它分开,这样只有括号两边的逗号才能分开。
所以上面用split
方法的string
应该返回:
['div:(li,div)', 'div']
当然,目前它也在拆分括号内的第一个逗号,返回:
['div:(li', 'div)', 'div']
有没有办法让这件事像我想要的那样成功?
如果期望的字符串不会变得比这更复杂,那么就不必担心编写代码来解析它们。Regex会很好用的。
http://jsfiddle.net/dC5HN/1/
var str = "div:(li,div),div:(li,div),div";
var parts = str.split(/,(?=(?:[^')]|'([^')]*'))*$)/g);
console.log(parts);
输出:
["div:(li,div)", "div:(li,div)", "div"]
REGEX不是为这类事情而构建的,它本质上是解析。
以前遇到这种情况时,我首先用占位符临时替换带括号的部分,然后拆分,然后用原始带括号的零件替换占位符。
有点古怪,但它有效:
var str = 'div:(li,div),div',
repls = [];
//first strip out parenthesised parts and store in array
str = str.replace(/'([^')]*')/g, function($0) {
repls.push($0);
return '*repl'+(repls.length - 1)+'*';
});
//with the parenthisised parts removed, split the string then iteratively
//reinstate the removed parenthisised parts
var pieces = str.split(',').map(function(val, index) {
return val.replace(/'*repl('d+)'*/, function($0, $1) {
return repls[$1];
});
});
//test
console.log(pieces); //["div:(li,div)","div"]
此函数将拆分您在splitChar中指定的任何值,但如果括号内为,则忽略该值
function customSplit(stringToSplit, splitChar){
var arr = new Array();
var isParenOpen = 0
var curChar;
var curString = "";
for (var i = 0; i < stringToSplit.length; i++) {
curChar = stringToSplit.substr(i, 1);
switch(curChar) {
case "(":
isParenOpen++;
break;
case ")":
if(isParenOpen > 0) isParenOpen--;
break;
case splitChar:
if (isParenOpen < 1) {
arr.push(curString);
curString = "";
continue;
}
}
curString += curChar;
}
if (curString.length > 0) {
arr.push(curString);
}
return arr;
}
相关文章:
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 循环比赛位置算法
- 拆分单词jquery
- es6 相当于下划线查找位置
- jQuery循环在特定位置暂停
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 自定义函数中的光标位置
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 安卓平台上的QWebView HTML5地理位置
- DIV并排,位置不正确
- 只在某些位置拆分数组,而不在其他位置拆分
- 从位置拆分带有javascript的URL
- 在光标位置上拆分文本区域的文本.(asp.net C#)
- jQuery:在鼠标点击位置拆分文本
- 基于奇/偶位置将一个数组拆分为两个数组
- 使用jQuery或CSS在特定位置将链接的ul列表拆分为单独的列
- 在Javascript中,根据indexOf的位置拆分数组并组合成单独的数组