2

name\|dial_num|032\|0095\\|\\0099|\9925文字列を区切り文字で分割しようとして|いますが、スキップされ\|ます。このリンクで解決策を見つけました: Javascript regexp that matching '.' '\' (後読み代替)が前に付いていませんが、スキップ\\|もします。

正しい結果は次のようになります: [name\|dial_num,032\|0095\\,\\0099,\9925].

ルールは in case \\\|or \\\\\|or etc で|あり、引き続き有効な区切り文字ですが、in case \\\\|or even more の場合はそうではありません。

どんな助けでも感謝します。

4

2 に答える 2

2

通常の回避策は、match代わりに使用することですsplit

> s = "name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925"
"name\|dial_num|032\|0095\\|\\0099|\9925"
> s.match(/(\\.|[^|])+/g)
["name\|dial_num", "032\|0095\\", "\\0099", "\9925"]

補足として、たとえ JS が後読みをサポートしていたとしても、それは解決策にはなりませ(?<!\\)|\\|

于 2013-10-04T08:13:45.970 に答える
0

文字列置換メソッドの使用に挑戦しました。

regex101.com (PCRE、Javascript、および Python 正規表現エンジンの人気のあるオンライン テスター) を使用して正しい結果を得ました。

// input : name\|dial_num|032\|0095\\|\\0099|\9925
// regex : ([^\\|](?:\\\\)*)\|                       with global flag
// replacement : $1,
// output: name\|dial_num,032\|0095\\,\\0099,\9925   <= seams okey right !?

テスト ..

var str = 'name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925';
str = str.replace(/([^\\|](?:\\\\)*)\|/g,'$1,');
console.log(str);
// > name\|dial_num,032\|0095\\,\\0099,\9925
于 2013-10-04T13:48:42.757 に答える