4

一部の文字を演算子として使用して、テキストボックスからテキストを分割しようとしています。グーグルとほとんど同じように、グループ化演算子( ")と" AND "演算子(+)があります。したがって、このテキストは次のようになります。

box +box +"box" "box" "is.a.box" +"is.a.box" +"is a box"

テキストボックスでこれを返しています:

myArray[0] = box
myArray[1] = +box
myArray[2] = +
myArray[3] = "box"
myArray[4] = "box"
myArray[5] = "is.a.box"
myArray[6] = +
myArray[7] = "is.a.box"
myArray[8] = +
myArray[9] = "is a box"

代わりに、これを返したい:

myArray[0] = box
myArray[1] = +box
myArray[2] = +"box"
myArray[3] = "box"
myArray[4] = "is.a.box"
myArray[5] = +"is.a.box"
myArray[6] = +"is a box"

これは私が使用している正規表現です:

/[\+\w]+|"[^"]+"/g

「」と「+」の記号で分割するにはどうすればよいですか?

4

3 に答える 3

4

これを見てください:

str.match(/\+?(?:"[^"]*"|[^\s+]+)/g)

それは+可能であればから始まります。次に、を一致させようとし"ます。"可能であれば、できるだけ多くの非文字と最後のを取り"ます。ない場合は、できるだけ"多くの非スペース、非+文字を取り込みます。

+これは、両方の可能なケースの前でオプションを取り出したことを除いて、ほとんどあなたが持っていたものです。

もう1つ追加。box"box"2つの一致が発生する場合は、これbox"box"使用します。

str.match(/\+?(?:"[^"]*"|[^\s+"]+)/g)
于 2012-11-20T16:22:25.017 に答える
3
/\+?("[^"]*"|[^\s+])+/g

秘訣は、引用符で囲まれた文字列を単一の文字であるかのように扱うことです。非空白、非特殊文字([^\s+])に見えますが、引用符で囲まれた文字列("[^"]*")は1文字であるかのように見せかけます。

> 'box +box +"box" "box" "is.a.box" +"is.a.box"'.match(/\+?("[^"]*"|[^\s+])+/g)
  ["box", "+box", "+"box"", ""box"", ""is.a.box"", "+"is.a.box""]

> '"string with spaces" +"extended phrase"'.match(/\+?("[^"]*"|[^\s+])+/g)
  [""string with spaces"", "+"extended phrase""]

> 'box+box'.match(/\+?("[^"]*"|[^\s+])+/g)
  ["box", "+box"]
于 2012-11-20T16:22:46.260 に答える
0

必要な結果は、スペースを簡単に分割することで実現できます。

次のコマンドを使用して、少しスマートにし、複数の空白を折りたたむことができます。

myArray = str.split(/[\s]+/g)

入力文字列の場合、これは必要な配列を返します。

["box", "+box", "+"box"", ""box"", ""is.a.box"", "+"is.a.box""]
于 2012-11-20T16:31:05.893 に答える