2012-08-13 70 views
1

我需要檢查該數字是否在一個字母旁邊,如果是,則添加一個下劃線。Javascript正則表達式:如果一個字母與一個數字相鄰,則添加一個下劃線

例如:

Grapes23 --> Grapes_23 

我已經嘗試了好一陣子,但我是新來的正則表達式。我試過這個,但它不起作用:

str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore 

我很感激任何幫助,謝謝!

+0

首先,'[A-Z]'不符合你想要的,'[a-zA-Z]'會。其次,您沒有使用您設置的捕獲組,您正在替換所有組件。第三,'+'字符意味着一個或更多,但在你的情況下,這並不重要,所以刪除它。此外,'\ d'特殊字符將匹配所有數字,可代替'[0-9]' – TheZ 2012-08-13 20:16:10

+0

感謝您的解釋,非常有幫助 – gray 2012-08-13 21:03:31

回答

5

尋找一個字母后面的數字:

str = str.replace(/([a-z])(?=[0-9])/ig, '$1_'); 

http://regexr.com?31qsr

如何正則表達式的工作原理:

  • ([a-z])是任何小寫字母,在括號包裹它使一個 「匹配組」
  • (?=[0-9])是一個「展望」。其基本意思是「然後按[0-9](任意數字)」
  • i意味着忽略的情況下(否則我們將不得不使用[a-zA-Z]
  • g意味着全球性的,或更換每場比賽找到(默認情況下只替換第一個)
  • $1意思是「第一匹配組」,或者是上面第一個項目符合的字母。
+0

我喜歡這一點,並瞭解它,但由於@gray說他是新來的正則表達式,一些解釋會有所幫助。 (例如,你捕獲的是字母,但不是數字 - 這是怎麼回事?) – 2012-08-13 20:16:09

+0

在@ jbabey的正則表達式中,你不匹配數字,只是一個緊跟在數字後面的字母。這就是爲什麼你不必在替換字符串中重新插入數字。 – jackwanders 2012-08-13 20:39:40

+0

非常感謝你的完美工作。我很瞭解發生了什麼,但我必須研究它才能確切地知道。並感謝大家elses答案,真的很感謝你的幫助 – gray 2012-08-13 21:00:33

4

在您的字符串上運行str.replace(/([a-zA-Z])(\d)/g,'$1_$2')。這將查找任何字母后跟一個數字,捕獲字母和數字(注意圓括號),然後用兩者之間的下劃線替換它們。 $ 1和$ 2是對捕獲的字母和正則表達式匹配中找到的數字的回調。

3

最簡單的方法是:

string.replace(/(\D​​​​​​​​​​​​)(\d)/,'$1_$2') 

JS Fiddle

請注意,這隻會替換第一例如,如果您要更換所有的情況下,那麼我建議以上,但與g(全局)標誌:

string.replace(/(\D​​​​​​​​​​​​)(\d)/g,'$1_$2') 

JS Fiddle

+0

我不會使用'\ D'作爲描述「信」,因爲它會匹配任何非數字。 – TheZ 2012-08-13 20:12:21

+0

+1對不起,這很好。 – Joe 2012-08-13 20:14:20

+0

啊,謝謝@Joe;我以爲我錯過了一個邊緣案例(我的JS小提琴是有限的)。=) – 2012-08-13 20:14:56

相關問題