2012-07-20 108 views
0

爲什麼用正則表達式插入符號

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

刪除 「A」 和 「B」 代替?我認爲它應該只刪除「b」,因爲「a」前面有一個我被[^ \ d]排除的數字。

誰能幫幫我?

+0

'a = a.match(/ [^ \ d] [az]/g,「」);'試試這個和你會看到你的代碼匹配 – Bob 2012-07-20 08:06:24

+3

正如你可以從答案中看到的,有很多人可以幫助你做到這一點,但是你可能想要更準確地知道你到底想要什麼。有很多方法去除b,如果你指定了你的規則是什麼,哪些東西要保留,哪些要丟棄,那將是很好的方法。 – Thor84no 2012-07-20 08:06:48

+0

感謝您的建議。我明白你的意思!在這種特殊情況下,我實際上不明白爲什麼RegExp以這種方式行事。當然,這背後有一項編程任務,但與這個特殊問題無關。我是RegExp的新手,我不知道捕獲組甚至存在。現在我做:-) – heinob 2012-07-20 12:49:05

回答

3

它將它們刪除,因爲你的角色類別[^\d]表示「任何不是數字的東西」。 ^表示「不」,而\d表示「數字」。所以你的表達的意思是「匹配任何不是數字後跟任何小寫字母」,匹配"ab"

要刪除沒有一個數字在他們面前的只有小寫字母,它可能是最容易捕獲組做到這一點:

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

,上面寫着:匹配一個數字,然後按小寫字母(作爲一個組),然後是一個小寫字母(在組外),並將其替換爲組的內容。如果您想從"1abc"刪除"c",請在最後一個[a-z]後添加+,例如:/([\d][a-z])[a-z]+/g

+0

啊。得到它了!那麼表達式是什麼:所有字符都不是前面的數字? – heinob 2012-07-20 08:02:24

+0

@heinob:我添加了一個表達式來幫助'1ab',但它不像「沒有數字前面的所有字符」一般。 – 2012-07-20 08:04:44

2

你的正則表達式用於替換一個不是數字的字符,後面跟着一個沒有空格的字符,並替換它找到的所有匹配。

在您的字符串1ab中,它將首先匹配a而不是數字,然後b作爲a-z,因此您的字符串中將保留「1」。

如果你想找到一個字母出了一些後續並提取了這一點,我建議這樣的:

var match = a.match(/\d[a-z]/); 
if (match) { 
    var result = match[0]; 
} 
0

你想要什麼可能是negative lookbehind,換句話說,正則表達式應該是/(?!<\d)[a-z]/g 。這個發現任何(小寫)字符之前沒有數字(我猜是你想要的,因爲你只希望b被刪除)。

+1

JavaScript沒有它們。 (不是我的DV,順便說一句) – 2012-07-20 08:05:11

+0

沒錯,我沒有發現它是JS。那麼明顯的解決方案就是使用一個人們已經涉及的捕獲組。 – Thor84no 2012-07-20 08:09:26

1

你的正則表達式是做什麼它說:

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