1

私はすでにほぼ同じ他の質問を見ており、少しカスタマイズしてRegExrで機能するソリューションを見つけました。問題は、Javascript で動作しないことです。

表現:([^\s]*"[^"]+"[^\s]*)|[^"]?\w+[^"]?

テスト文字列:+w1 @w2 (w3 (w4) @"w5 6"

期待される結果:['+w1', '@w2', '(w3', '(w4)', '@"w5 w6"']

Javascript コード:console.log(/([^\s]*"[^"]+"[^\s]*)|[^"]?\w+[^"]?/g.exec(test_str));

Javascript の結果: ["+w1 ", undefined](FF15 および Chrome 22 でテスト済み)

MDN のドキュメントを調べましたが、グローバル フラグ以外に関連するフラグはありません。試しに、複数行の大文字と小文字を区別しないフラグを追加しましたが、役に立ちませんでした。

RegExr で動作しているように見えるのに、Javascript で壊れる原因は何ですか? (そして、Flash の Actionscript も ECMAScript ではないので、RegExr は同じ正規表現エンジンを使用すべきではありませんか?) RegExr では、有効なフラグはグローバル フラグのみです。

編集:もう1つの問題は、"w1 \"w2\" w3"1つの単語である必要があるのに2つの単語として一致することです。何か案は?

4

1 に答える 1

1

試す:

console.log('+w1 @w2 (w3 (w4) @"w5 6"'.match(/[^"\s]+(?:".*"\S*)?/g));
于 2012-10-15T15:25:05.480 に答える