なぜ
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
「a」と「b」を削除しますか?「a」の前に [^\d] で除外した数字があるため、「b」だけを削除する必要があると考えました。
誰が私を助けることができます?
なぜ
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
「a」と「b」を削除しますか?「a」の前に [^\d] で除外した数字があるため、「b」だけを削除する必要があると考えました。
誰が私を助けることができます?
文字クラス[^\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
あなたの正規表現は、数字ではない文字の後に az である文字が続く文字を何も置き換えず、見つかったすべての一致を置き換えることを示しています。
文字列 1ab では、最初にa
as NOT a digit と一致し、次にb
as az と一致するため、文字列に「1」が残ります。
数字の後に1文字が続くものを見つけて、それだけを抽出したい場合は、これをお勧めします:
var match = a.match(/\d[a-z]/);
if (match) {
var result = match[0];
}
あなたの正規表現は、それが言うことを正確に行っています:
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」に置き換えています
あなたが望むのは、おそらく否定的な後読みです。つまり、正規表現は/(?!<\d)[a-z]/g
. これは、数字が前に付いていない(小文字の)文字を見つけます( b だけが削除されることを期待していたので、これが必要だと思います)。