3

私はこれに少し困惑しています-私はほとんどセミコロンで区切られた文字列である文字列を持っていますそれは次のようになります:

1; 2; 3 "4; 5; 6"; セブン

javascriptの正規表現を使用してこれを次のような配列に分割したいと思います(たとえば、二重引用符内のセミコロンを無視します):

['一二三四五六七']

既知の動作するCSV関数を適応させようとしましたが、3番目の要素(「3 "4; 5; 6";」)で動作するように適応できるようです。

正規表現タイプの問題のように見えますが、正規表現以上のものを使用した解決策が存在する場合、私は確かに興味があります!

更新:引用符で囲まれた文字列のセミコロンの前後にスペースがある場合があることにも注意してください。それを反映するように例を更新しました。

4

2 に答える 2

3

引用符内にエスケープされた引用符を許可しないと仮定すると(たとえば"this has \"escaped quotes\" inside")、これは機能するはずです:

var rx = /(?!;|$)[^;"]*(("[^"]*")[^;"]*)*/g;
var str = 'one; two; three "four;five;six"; seven';
var res = str.match(rx)
// res = ['one', ' two', ' three "four;five;six"', ' seven']

空の文字列と一致しないようにするには、正規表現の先頭に負の先読み が必要であることに注意してください。そうでない場合、メソッドは何らかの理由で各セミコロンの前の空の文字列と一致します。(?!;|$)match

アップデート:

この正規表現は、エスケープされた引用符でも機能するはずです(ただし、正確性についてのフィードバックをいただければ幸いです)。\sまた、前のセミコロンの後の空白を取り除くために、ネガティブルックアヘッドパターンに余分なものを追加しました。

/(?!\s|;|$)[^;"]*("(\\.|[^\\"])*"[^;"]*)*/g
于 2012-09-08T23:59:20.057 に答える
0

これにより、セミコロンの前後のスペースが削除されます。

'one; two; three "four;five;six"; seven'.match(/(?!;| |$)([^";]*"[^"]*")*([^";]*[^ ";])?/g)

['one', 'two', 'three";four;five;six"', 'seven']

'one ; two"; three ; "four" ; five ; "six ; seven'.match(/(?!;| |$)([^";]*"[^"]*")*([^";]*[^ ";])?/g)

['one', 'two" ; three ; "four" ; five ; "six', 'seven']

ただし、エスケープされた引用符を処理しようとはしません。

于 2012-09-09T00:14:57.387 に答える