私は問題があります。私は文字列を持っています-"\,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 では後読みがサポートされていないため、これは簡単にはできません。実際の正規表現を使用したとしても、最後の文字を食べてしまいます:
> "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 に正規表現の後読み (および負の後読み) パターンがあれば本当に素晴らしいのですが、残念ながらそうではありません。それが持っているのは、先読み ( (?=)
) と否定先読み ( (?!)
) パターンです。ドキュメントを確認してください。
文字列を逆にすると、これらを後読みとして使用できます。
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>
JSFiddleを参照してください