0

これらのような入力文字列があります

inspect [foo - bar] with [errors - 15] 
create [doodle]
force delete [quux]

つまり、角括弧内に情報を含む行です。

私が欲しいのは、一度にこれらの行の1つを取り、次のような配列を取得することです

["inspect", "[foo - bar], "with", "[errors - 15]"]

正規表現を使用すると、括弧で囲まれた式と括弧で囲まれた式の間の部分を別々に収集するのは簡単です。

var src = "inspect [foo - bar] with [errors - 15]"
var regexBracketed = /\[[a-zA-Z0-9_\- ]+\]/g;

// this returns an array of the bracketed expressions
console.log(src.match(regexBracketed));

// and this returns an array of the parts between the expressions
console.log(src.split(regexBracketed));

1 つの配列だけですべてを取得する簡単な方法はありますか? たぶん、私はこれを完全に間違った方法で攻撃しています。

4

3 に答える 3

2

グループ(括弧をキャプチャ)を参照していますか?/(.*)/

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

たとえば、角かっこで囲まれた文字列をキャプチャする場合は、次を使用できます。

var r=/^\s*[^\[\]]*\[([^\[\]]+)\](?:[^\[\]]*\[([^\[\]]*)\])?\s*$/;
var m = "inspect [foo - bar] with [errors - 15] ".match(r);
console.log(m[1], m[2]);

式に追加\s*して、空白を削除することもできます。

于 2012-09-20T07:53:00.293 に答える
1

これが私がやった方法とjsFiddleです。

var src = "inspect [foo - bar] with [errors - 15] " +
          "create [doodle] " +
          "force delete [quux]";

var regex = /[^\[]+|[^\]]+\]/g;

document.write(src.match(regex));​

出力:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux]

そして、私はあなたが好きなように空白をトリミングする方法を知っていると信じています:)

確かに少し不可解に見える正規表現を説明するために、それは単に「私にすべての文字をまで取得し[ます。または、すでににいる場合は、[すべての文字を最大まで取得します。それ]に加えて、]お願いします! 」と言っています。 「」

于 2012-09-20T07:54:58.200 に答える
1

@akonsu は正しいです。次のように括弧を追加するだけです。

var src = "inspect [foo - bar] with [errors - 15]";
var regexCapturing = /(\[[a-zA-Z0-9_\- ]+\])/;
console.log(src.split(regexCapturing));

出力します

 ["inspect ", "[foo - bar]", " with ", "[errors - 15]", ""] 

最後の空の文字列をいくつかの空白をトリミングしてスキップすると、準備が整いました。ありがとう。

(コメントでコードの書式設定を使用できないため、これを回答として書いています。)

于 2012-09-20T08:04:17.283 に答える