0

なぜ

var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");

「a」と「b」を削除しますか?「a」の前に [^\d] で除外した数字があるため、「b」だけを削除する必要があると考えました。

誰が私を助けることができます?

4

4 に答える 4

3

文字クラス[^\d]は「数字ではないもの」を意味するため、それらを削除します。The^は「ない」を\d意味し、「数字」を意味します。したがって、あなたの式は「数字の後に小文字が続くものではないものに一致する」ことを意味し、一致し"ab"ます。

先頭に数字がない小文字のみを削除するには、キャプチャ グループを使用するのがおそらく最も簡単です。

a = a.replace(/([\d][a-z])[a-z]/g, "$1");

つまり、数字の後に小文字が続き (グループとして)、その後に小文字が続く (グループの外で) 一致し、それをグループの内容だけに置き換えます。"c"から削除する場合は、最後の の後に"1abc"a を追加します。+[a-z]/([\d][a-z])[a-z]+/g

于 2012-07-20T07:58:02.360 に答える
2

あなたの正規表現は、数字ではない文字の後に az である文字が続く文字を何も置き換えず、見つかったすべての一致を置き換えることを示しています。

文字列 1ab では、最初にaas NOT a digit と一致し、次にbas az と一致するため、文字列に「1」が残ります。

数字の後に1文字が続くものを見つけて、それだけを抽出したい場合は、これをお勧めします:

var match = a.match(/\d[a-z]/);
if (match) {
    var result = match[0];
}
于 2012-07-20T07:59:28.530 に答える
1

あなたの正規表現は、それが言うことを正確に行っています:

var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b

ab を "" に置き換えています。

数字が前にない文字だけを置き換えたい場合は、次のようにします。

a.replace(/([^\d])[a-z]/g, "$1");
............a.....b   ......a

ab を最初の一致「a」に置き換えています

于 2012-07-20T08:01:45.667 に答える
0

あなたが望むのは、おそらく否定的な後読みです。つまり、正規表現は/(?!<\d)[a-z]/g. これは、数字が前に付いていない(小文字の)文字を見つけます( b だけが削除されることを期待していたので、これが必要だと思います)。

于 2012-07-20T08:01:29.073 に答える