我有个问题。我有一个字符串 -"\,str\,i,ing"
我需要用逗号分隔,之前没有斜杠。对于我的字符串 - ["\,str\,i", "ing"]
。我正在使用下一个正则表达式
myString.split("[^\],", 2)
但它不起作用。
我有个问题。我有一个字符串 -"\,str\,i,ing"
我需要用逗号分隔,之前没有斜杠。对于我的字符串 - ["\,str\,i", "ing"]
。我正在使用下一个正则表达式
myString.split("[^\],", 2)
但它不起作用。
Well, this is ridiculous to avoid the lack of lookbehind but seems to get the correct result.
"\\,str\\,i,ing".split('').reverse().join('').split(/,(?=[^\\])/).map(function(a){
return a.split('').reverse().join('');
}).reverse();
//=> ["\,str\,i", "ing"]
不确定您的预期输出,但您指定的字符串不是正则表达式,请使用:
var arr = "\,str\,i,ing".split(/[^\\],/, 2);
console.log(arr);
要split
使用正则表达式,请将您的正则表达式包装在/..../
您选择了一个难以匹配的字符 - 逗号前面的正斜杠在字符串中传递时很容易消失,因为 '\,'==','...
var s= 'My dog, the one with two \\, blue \\,eyes, is asleep.';
var a= [], M, rx=/(\\?),/g;
while((M= rx.exec(s))!= null){
if(M[1]) continue;
a.push(s.substring(0, rx.lastIndex-1));
s= s.substring(rx.lastIndex);
rx.lastIndex= 0;
};
a.push(s);
/* returned value: (Array)
My dog
the one with two \, blue \,eyes
is asleep.
*/
这在 js 中是不容易实现的,因为它不支持lookbehind。即使您使用真正的正则表达式,它也会吃掉最后一个字符:
> "xyz\\,xyz,xyz".split(/[^\\],/, 2)
["xyz\\,xy", "xyz"]
如果你不想z
吃,我建议:
var str = "....";
return str.split(",").reduce(function(res, part) {
var l = res.length;
if (l && res[l-1].substr(-1) == "\\" || l<2)
// ^ ^^ ^
// not the first was escaped limit
res[l-1] += ","+part;
else
res.push(part);
return;
}, []);
在两行之间阅读,您似乎想用,
前面没有字符的字符来拆分字符串\
。
如果 JavaScript 有一个正则表达式lookbehind(和否定的lookbehind)模式,那就太好了,但不幸的是它没有。它确实有一个前瞻 ( (?=)
) 和负前瞻 ( (?!)
) 模式。请务必查看文档。
如果您反转字符串,您可以使用这些作为后向:
var str,
reverseStr,
arr,
reverseArr;
//don't forget to escape your backslashes
str = '\\,str\\,i,ing';
//reverse your string
reverseStr = str.split('').reverse().join('');
//split the array on `,`s that aren't followed by `\`
reverseArr = reverseStr.split(/,(?!\\)/);
//reverse the reversed array, and reverse each string in the array
arr = reverseArr.reverse().map(function (val) {
return val.split('').reverse().join('');
});
查找原始字符串中不存在的内容,例如"@@@"
. 用它代替"\\,"
。将结果字符串拆分为","
. 换回. "@@@"
_"\\,"
像这样的东西:
<script type="text/javascript">
var s1 = "\\,str\\,i,ing";
var s2 = s1.replace(/\\,/g,"@@@");
console.log(s2);
var s3 = s2.split(",");
for (var i=0;i<s3.length;i++)
{
s3[i] = s3[i].replace(/@@@/g,"\\,");
}
console.log(s3);
</script>