0

文字列内のクラス名を確認する必要があります。

私の文字列は次のようになります。

testing ui-li ui-li-static ui-btn-up-f ui-first-child ui-filter-hidequeue

そして、私はui-filter-hidequeue文字列のどこか(!)を探しています。

これが私が試していることです。null私が一致させようとしている文字列はそこにありますが、それは常にを返します:

var classPassed = 'ui-filter-hidequeue',
    classes = 'testing ui-li ui-li-static ui-btn-up-f ui-first-child ui-filter-hidequeue',
    c = new RegExp('(?:\s|^)' + classPassed + '(?:\s|$)');

console.log( classes.match(c) )   // returns null

質問:
正規表現で何が間違っているのか誰かに教えてもらえますか?

ありがとう!

4

2 に答える 2

2

必要\\sです。\s文字列内ではs、をエスケープする必要はありません。これは、エスケープする必要がなく、単に。に評価され"s"ます。つまり、リテラルregexpsを使用している場合、バックスラッシュはregexp文字をエスケープします。また、文字列はバックスラッシュを使用して文字列文字をエスケープします。文字列から正規表現を作成するときは、これらのレイヤーの両方について考える必要があります。これ\\は文字列エスケープの言い方であり\、次に\s正規表現エスケープの空白の言い方です。

また、他のコメントが示すように、クラスの存在をテストするためのより良い方法があります。:)しかし、私は直接のエラーに答えました。

于 2013-03-25T00:44:39.813 に答える
0

これを使用してみてください:

c = new RegExp('\\b' + classPassed + '\\b');

メタ文字は単語の\b最初/最後で一致します。それは境界を表します(たとえば、単語のboudnary)。

于 2013-03-25T00:44:55.097 に答える