Javascript拆分功能不正确使用特定的正则表达式

时间:2012-06-14 15:16:40

标签: javascript regex

我有问题。我有一个字符串 - "\,str\,i,ing",我需要用逗号分割,之前没有斜杠。对于我的字符串 - ["\,str\,i", "ing"]。我正在使用下一个正则表达式

myString.split("[^\],", 2)

但它不起作用。

6 个答案:

答案 0 :(得分:3)

嗯,这是荒谬的,以避免缺乏外观,但似乎得到了正确的结果。

"\\,str\\,i,ing".split('').reverse().join('').split(/,(?=[^\\])/).map(function(a){
    return a.split('').reverse().join('');
}).reverse();

//=> ["\,str\,i", "ing"]

答案 1 :(得分:2)

不确定您的预期输出但是您指定的字符串不是正则表达式,请使用:

var arr = "\,str\,i,ing".split(/[^\\],/, 2);
console.log(arr);

要使用正则表达式split,请将您的正则表达式包装在/..../

答案 2 :(得分:0)

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;
}, []);

答案 3 :(得分:0)

在行之间进行读取,看起来您希望按,字符前面的\字符拆分字符串。

如果JavaScript有一个正则表达式后观(和负面的lookbehind)模式,那将是非常好的,但不幸的是它没有。 所做的具有前瞻((?=))和负前瞻((?!))模式。请务必review the documentation

如果你反转字符串,你可以使用它们作为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('');
});

答案 4 :(得分:0)

你选择了一个难以匹配的角色 - 当你用字符串传递它时,逗号前面的正斜杠很容易消失,因为'\,'==','...

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.
*/

答案 5 :(得分:0)

找到原始字符串中不存在的内容,例如"@@@"。用它替换"\\,"。将结果字符串拆分为","。将"@@@"替换为"\\,"

这样的事情:

<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>

请参阅JSFiddle