0

文字列を空白で分割する必要がありますが、空白が "()" または "[]" 内にある場合は必要ありません。here から同様の質問をいくつか見つけましたが、理想的な解決策を見つけることができませんでした。

解析したい文字列は次のようになります (角かっこは通常のかっこに置き換えることもできます)。

(1)「いくつかのテキスト[より多くのテキスト]」

(2)「一部のテキスト[より多くのテキスト]」

私はそれらを次のように分割したい:

(1) [「一部」、「テキスト」、「[その他のテキスト]」]

(2) [「一部」、「テキスト[さらにテキスト]」]

Javascript - 括弧内以外はスペースで区切る - この質問は非常に似ており、答えは最初の (1) の状況で非常にうまく機能します。しかし、2 番目 (2) の状況では、うまく機能しません。分割後は、次のようになります。

["いくつか", "テキスト[もっと", "テキスト]"]

私が望むものを達成する簡単な方法はありますか?

4

3 に答える 3

1

これらはうまくいくようです:

1: \[[^\]]+\]|\S+\[[^\]]+\]|\S+
2: \[[^\]]+\]|(\S(\[[^\]]+\])?)+
3: (\S+)?\[[^\]]+\]|\S+

Regex Heroによると、最初のものははるかに優れており、Miguel の回答はさらにわずかに高速です。

于 2012-05-17T10:08:02.530 に答える
0

試す(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

var a = "Some text [more text]";
var b = "Some text[more text]";

結果は次のとおりです。

a.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

[「一部」、「テキスト」、「[その他のテキスト]」]

b.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

[「一部」、「テキスト[その他のテキスト]」]

于 2012-05-17T10:34:26.007 に答える
0

次の正規表現を使用します。

/(\w+)?(\([^\)]*?\)|\[[^\]]*?\])(\w+)?|\w+/g

サンプル:

console.log( 'Some(1) text [more text]'.match(regex) );
//Output-> ["Some(1)", "text", "[more text]"]

console.log( '(2) Some text[more text]'.match(regex) );
//Output-> ["(2)", "Some", "text[more text]"]

console.log( '(3 45)Some text[more text]'.match(regex) );
//Output-> ["(3 45)Some", "text[more text]"]
于 2012-05-17T11:04:08.397 に答える