0

次の 2 つの JavaScript コマンドを見てください。

alert(' test £32 <!-- -->'.replace(/^\s+|[ ><!-]+$/g,''));

alert(' test £32 <!-- -->'.replace(/^\s+|[ <!->]+$/g,''));

最初のものは正しく動作します - それはメッセージ "test £32" を警告します。これは私が期待するものです。ただし、2 番目のものは「test £」を生成します。どうしてこれなの?[] 内で > を移動すると、数字が削除され始めるのはなぜですか?

4

2 に答える 2

0

-最後の場所からその間に!移動すると>、大きな違いが生まれます。具体的には、が文字クラス内で指定された最初または最後の文字でない-場合は、のような構造になります。次に、クラスは、との間のコードポイントを持つすべての文字を照合します。a-bab

のUnicodeコードポイント!はU+0021ですが、のコードポイント>はU+003Eです。間にある範囲には、すべての数字を含むいくつかの文字が含まれています(U+0030からU+0039までのコードポイントがあります)。正確なリストはここで確認できます。したがって、文字クラスも数字と一致することになります。

この問題を解決するには、ハイフンを文字クラス内の最後の位置に配置するか(最初の例のように)、バックスラッシュでエスケープしてリテラル文字として扱います。

alert(' test £32 <!-- -->'.replace(/^\s+|[ <!\->]+$/g,''));
于 2013-01-24T11:01:31.073 に答える
0

正規表現で範囲を構築するときに、-をエスケープする必要があります。\--

使用する

' test £32 <!-- -->'.replace(/^\s+|[ ><!\-]+$/g,'')
于 2013-01-24T11:03:25.667 に答える