0

私のプログラムでは、htmlタグのidを検証したいと思います。私の関数には、idが#の前にある文字列として渡されます。HTMLの名前付けとidのルールは次のとおりです。

  • AZまたはazの文字で始まる必要があります
  • 続いて、文字(A-Za-z)、数字(0-9)、ハイフン( "-")、およびアンダースコア( "_")を続けることができるので、次の正規表現を記述しました。

    /(^ | \ s)(#{1})([a-zA-Z])([^ a-zA-Z0-9] {0})/ g;

しかし、それは私に間違った結果を与えています。私の正規表現の何が問題になっていますか?

4

2 に答える 2

2
/#[a-z][\w\d-]*\b/gi
  • \waz、AZ、およびアンダースコア (_) の文字を表します
  • \d0 ~ 9 の整数を表します
  • \b単語の境界を意味します
  • iフラグは、大文字と小文字に関係なく最初の文字をキャッチすることです

編集:グループの最初の境界を忘れてすみません。

var str = '#sss #s23 dd#ww';
// #ww will be omitted because # is not the
// first char in the char group there.
var rx = /(^|\s)(#[a-z][\w\d-]*)\b/gi;
var arr = [];
str.replace(rx, function(){arr.push(arguments[2])});
// this is just to catch the id's.
// it won't modify str.
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}
于 2012-04-30T22:43:42.887 に答える
1

試す:

/^#[a-z]{1}[a-z0-9_-]*$/i

于 2012-04-30T22:01:49.460 に答える