0
var  str = ")shenmajs-(shenmajsb)hghghg";
var reg = /\b[^aoieu][a-z]*\b/g;
str.match(reg);

//returns ["shenmajs", "shenmajsb", ")hghghg"]

文字[aoieu]で始まらない単語と一致させたい。返される配列の最初の項目は「shenmajs」ですが、3番目の項目は「)hghghg」です。なぜ「)」を含めることができるのかわかりません。手伝って頂けますか?ありがとう

4

2 に答える 2

2

これがregexrでのあなたのケースのオンラインビューです:http://gskinner.com/RegExr/?325rr

「)」が含まれているのは、正規表現がa、e、i、o、またはu以外の文字を[^aeiou]意味するためです。そして、それは「)」を含みます。

正規表現が機能する方法は、アンカー\bが解釈される方法と関係があります。このページから

単語の境界として適格な3つの異なる位置があります。

  1. 文字列の最初の文字の前で、最初の文字がワールド文字の場合。

  2. 文字列の最後の文字の後、最後の文字が単語文字の場合。

  3. 文字列内の2つの文字の間。一方は単語文字で、もう一方は単語文字ではありません。

したがって、最初の「)」の前ではなく\b、最初のsの前に最初に一致します(ルール1によって最初の単語境界を取得しないため)。最初の試合はダッシュの前のアンカーで終了しました。次の試合は、ダッシュから始まる試合を取得できないため、「(」とsの間のアンカーで始まります!(試してみてください!)。3番目の試合は、bと"の間のアンカーで始まります。 )」。「)」が入っていないので、次の試合を始めることができます。また、これもうまく機能します。直後に、単語の境界が終了する0個以上のazが続きます。[aeiou]

于 2012-09-17T03:20:41.997 に答える
1

正規表現は")hghghg"、a、o、i、e、またはu以外の文字で始まり、その後に0個以上の文字が続くために選択されています。

試す:

var reg = /\b[a-z-[aeiuo]][a-z]*\b/g;

つまり、母音ではない文字(a、e、i、o、またはu)で始まり、その後に0個以上の文字が続くすべての単語。

于 2012-09-17T03:31:45.293 に答える