4

1 ~ 4 行目の文字列「smith」に一致する Javascript の RegEx が必要ですが、以下の 5 ~ 8 行目では一致しません。
番号付きの行は、Access データベースのフィールドです (フィールドには番号が含まれていません)。
私がこれまでに持っているものは次のとおりです。

var xy = 'smith';
MyString = new RegExp('(^|\\W)' + xy + '(\\W|$)', 'i');

これは、行 1 ~ 4 のスミスに一致しますが、行 7 および 8 のスミスにも一致し
ます。ハイフンが前後にあるスミスも無視する式を取得するにはどうすればよいですか?

  1. スミス、ジョーンズ、ウィルソン
  2. スミス・ジョーンズ・ウィルソン
  3. ジョーンズ、スミス(Jr)、ウィルソン
  4. ジョーンズ、ウィルソン、スミス
  5. アロースミス、ジョーンズ
  6. ウィルソン、スミッソン
  7. ジョーンズ、スミス・トレッドストーン、ウィルソン
  8. ウィルソン、ブレイクリー・スミス、ジョーンズ

1週間と何十回も試行した後、専門家に尋ねています!

4

1 に答える 1

3

否定文字クラス ( \W) を自分で書き、ハイフンを含めます。

MyString = new RegExp('(^|[^a-z0-9_-])' + xy + '([^a-z0-9_-]|$)', 'i');

while\Wは単語以外の文字 (文字、数字、アンダースコア以外のすべて) に[^a-z0-9_-]一致し、単語の文字でもハイフンでもない文字に一致します。

\wもちろん、その文字クラス内で使用できます。

MyString = new RegExp('(^|[^\\w-])' + xy + '([^\\w-]|$)', 'i');
于 2012-10-29T00:08:55.300 に答える