爲什麼用正則表達式插入符號
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
刪除 「A」 和 「B」 代替?我認爲它應該只刪除「b」,因爲「a」前面有一個我被[^ \ d]排除的數字。
誰能幫幫我?
爲什麼用正則表達式插入符號
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
刪除 「A」 和 「B」 代替?我認爲它應該只刪除「b」,因爲「a」前面有一個我被[^ \ d]排除的數字。
誰能幫幫我?
它將它們刪除,因爲你的角色類別[^\d]
表示「任何不是數字的東西」。 ^
表示「不」,而\d
表示「數字」。所以你的表達的意思是「匹配任何不是數字後跟任何小寫字母」,匹配"ab"
。
要刪除沒有一個數字在他們面前的只有小寫字母,它可能是最容易捕獲組做到這一點:
a = a.replace(/([\d][a-z])[a-z]/g, "$1");
,上面寫着:匹配一個數字,然後按小寫字母(作爲一個組),然後是一個小寫字母(在組外),並將其替換爲組的內容。如果您想從"1abc"
刪除"c"
,請在最後一個[a-z]
後添加+
,例如:/([\d][a-z])[a-z]+/g
。
啊。得到它了!那麼表達式是什麼:所有字符都不是前面的數字? – heinob 2012-07-20 08:02:24
@heinob:我添加了一個表達式來幫助'1ab',但它不像「沒有數字前面的所有字符」一般。 – 2012-07-20 08:04:44
你的正則表達式用於替換一個不是數字的字符,後面跟着一個沒有空格的字符,並替換它找到的所有匹配。
在您的字符串1ab中,它將首先匹配a
而不是數字,然後b
作爲a-z,因此您的字符串中將保留「1」。
如果你想找到一個字母出了一些後續並提取了這一點,我建議這樣的:
var match = a.match(/\d[a-z]/);
if (match) {
var result = match[0];
}
你想要什麼可能是negative lookbehind,換句話說,正則表達式應該是/(?!<\d)[a-z]/g
。這個發現任何(小寫)字符之前沒有數字(我猜是你想要的,因爲你只希望b被刪除)。
JavaScript沒有它們。 (不是我的DV,順便說一句) – 2012-07-20 08:05:11
沒錯,我沒有發現它是JS。那麼明顯的解決方案就是使用一個人們已經涉及的捕獲組。 – Thor84no 2012-07-20 08:09:26
你的正則表達式是做什麼它說:
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b
它與「」替換AB
如果你想更換不僅沒有一個數字preceeded字母,你可以這樣做:
a.replace(/([^\d])[a-z]/g, "$1");
............a.....b ......a
它用第一個匹配「a」取代ab
'a = a.match(/ [^ \ d] [az]/g,「」);'試試這個和你會看到你的代碼匹配 – Bob 2012-07-20 08:06:24
正如你可以從答案中看到的,有很多人可以幫助你做到這一點,但是你可能想要更準確地知道你到底想要什麼。有很多方法去除b,如果你指定了你的規則是什麼,哪些東西要保留,哪些要丟棄,那將是很好的方法。 – Thor84no 2012-07-20 08:06:48
感謝您的建議。我明白你的意思!在這種特殊情況下,我實際上不明白爲什麼RegExp以這種方式行事。當然,這背後有一項編程任務,但與這個特殊問題無關。我是RegExp的新手,我不知道捕獲組甚至存在。現在我做:-) – heinob 2012-07-20 12:49:05