0

角かっこで囲まれていないすべての単語の数を返そうとしています。だから与えられた..

[don't match these words] but do match these

最後の 4 単語のカウントは 4 です。

これは.netで機能します:

\b(?<!\[)[\w']+(?!\])\b

ただし、後読みがサポートされていないため、Javascript では機能しません。

純粋な js 正規表現ソリューションのアイデアはありますか?

4

3 に答える 3

5

わかりました、これはうまくいくはずです:

\[[^\]]+\](?:^|\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b

ここでテストできます:
http://regexpal.com/

本文の後に角括弧内のテキストを含む代替が必要な場合は、それを 2 番目の代替として追加し、現在の 2 番目の代替を 3 番目にすることができます。
少し複雑ですが、今のところより良い解決策は思いつきません。

実際の一致で何かをする必要がある場合は、キャプチャ グループでそれらを見つけることができます。

アップデート:

説明: したがって、ここには 2 つのオプションがあります。

  1. \[[^\]]+\](?:^|\s)([\w']+)(?!\])\b

これは言っています:

  • \[[^\]]+\]- 角括弧内のすべてに一致 (キャプチャしないでください)
  • (?:^|\s)- 行頭またはスペースが続きます - 私がそれを見たとき、それは意味をなさないのでキャレットを取り出してください。\s
  • ([\w']+)- 次の文字が閉じ括弧でない限り、後続のすべての単語文字に一致します(?!\])- これもおそらく不要なので、先読みを削除してみましょう
  • \b- 単語境界に一致

2(?:^|\s)([\w']+)(?!\])\b

オプション 1 が見つからない場合は、最初の部分で角かっこがないことを確認したので、角かっこを探すことなく、単語の一致だけを行います。

わかりましたので、不要なものをすべて削除しました (機能する前にかなりの数のオプションを試したため、それらはそこにとどまりました:-)。修正された正規表現は以下のとおりです。

\[[^\]]+\]\s([\w']+)(?!\])\b|(?:^|\s)([\w']+)\b
于 2012-05-04T12:29:15.793 に答える
1

\[[^\]]*\]角かっこの間の単語を削除し、返された文字列をスペースで爆発させて残りの単語をカウントするようなものを使用します。

于 2012-05-04T11:45:50.990 に答える