4

私はすべての単語に一致するように次の正規表現を使用しています:

mystr.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) {...}

単語には、ドイツ語のウムラウトなどの特殊文字を含めることができることに注意してください。括弧内の単語を除くすべての単語を一致させるにはどうすればよいですか?

次の文字列がある場合:

here wäre c'è (don't match this one) match this

次の出力を取得したいと思います。

here
wäre
c'è
match
this

末尾のスペースは実際には重要ではありません。javascriptの正規表現でこれを達成する簡単な方法はありますか?

編集:最後の文字列「mystr」にもこのテキストが含まれている必要があるため、括弧内のテキストを削除できませんが、文字列操作は一致するテキストに対して実行されます。「mystr」に含まれる最後の文字列は次のようになります。

Here Wäre C'è (don't match this one) Match This
4

2 に答える 2

4

これを試して:

var str = "here wäre c'è (don't match this one) match this";

str.replace(/\([^\)]*\)/g, '')  // remove text inside parens (& parens)
   .match(/(\S+)/g);            // match remaining text

// ["here", "wäre", "c'è", "match", "this"]
于 2012-10-15T11:47:46.763 に答える
2

トーマス、この質問を復活させたのは、言及されていない単純な解決策があり、置き換えてから照合する必要がないためです(2つのステップではなく1つのステップ)。(正規表現のパターンを除外する方法に関する一般的な質問について調査を行っているときに、質問を見つけました。)

これが私たちの単純な正規表現です(右下のパネルでグループキャプチャを見て、regex101で動作しているのを見てください):

\(.*?\)|([^\W_]+[^\s-]*)

交代の左側は完全に一致し(parenthesized phrases)ます。これらの一致は無視されます。右側はグループ1の単語と一致してキャプチャしますが、左側の式と一致しなかったため、正しい単語であることがわかります。

このプログラムは、正規表現の使用方法を示しています(オンラインデモの一致を参照してください)。

<script>
var subject = 'here wäre c\'è (don\'t match this one) match this';
var regex = /\(.*?\)|([^\W_]+[^\s-]*)/g;
var group1Caps = [];
var match = regex.exec(subject);

// put Group 1 captures in an array
while (match != null) {
    if( match[1] != null ) group1Caps.push(match[1]);
    match = regex.exec(subject);
}

document.write("<br>*** Matches ***<br>");
if (group1Caps.length > 0) {
   for (key in group1Caps) document.write(group1Caps[key],"<br>");
   }

</script>

参照

状況s1、s2、s3 ..を除いて、パターンを一致させる(または置き換える)方法。

于 2014-05-21T06:58:39.093 に答える