我需要檢查該數字是否在一個字母旁邊,如果是,則添加一個下劃線。Javascript正則表達式:如果一個字母與一個數字相鄰,則添加一個下劃線
例如:
Grapes23 --> Grapes_23
我已經嘗試了好一陣子,但我是新來的正則表達式。我試過這個,但它不起作用:
str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore
我很感激任何幫助,謝謝!
我需要檢查該數字是否在一個字母旁邊,如果是,則添加一個下劃線。Javascript正則表達式:如果一個字母與一個數字相鄰,則添加一個下劃線
例如:
Grapes23 --> Grapes_23
我已經嘗試了好一陣子,但我是新來的正則表達式。我試過這個,但它不起作用:
str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore
我很感激任何幫助,謝謝!
尋找一個字母后面的數字:
str = str.replace(/([a-z])(?=[0-9])/ig, '$1_');
如何正則表達式的工作原理:
([a-z])
是任何小寫字母,在括號包裹它使一個 「匹配組」(?=[0-9])
是一個「展望」。其基本意思是「然後按[0-9](任意數字)」i
意味着忽略的情況下(否則我們將不得不使用[a-zA-Z]
)g
意味着全球性的,或更換每場比賽找到(默認情況下只替換第一個)$1
意思是「第一匹配組」,或者是上面第一個項目符合的字母。我喜歡這一點,並瞭解它,但由於@gray說他是新來的正則表達式,一些解釋會有所幫助。 (例如,你捕獲的是字母,但不是數字 - 這是怎麼回事?) – 2012-08-13 20:16:09
在@ jbabey的正則表達式中,你不匹配數字,只是一個緊跟在數字後面的字母。這就是爲什麼你不必在替換字符串中重新插入數字。 – jackwanders 2012-08-13 20:39:40
非常感謝你的完美工作。我很瞭解發生了什麼,但我必須研究它才能確切地知道。並感謝大家elses答案,真的很感謝你的幫助 – gray 2012-08-13 21:00:33
在您的字符串上運行str.replace(/([a-zA-Z])(\d)/g,'$1_$2')
。這將查找任何字母后跟一個數字,捕獲字母和數字(注意圓括號),然後用兩者之間的下劃線替換它們。 $ 1和$ 2是對捕獲的字母和正則表達式匹配中找到的數字的回調。
最簡單的方法是:
string.replace(/(\D)(\d)/,'$1_$2')
請注意,這隻會替換第一例如,如果您要更換所有的情況下,那麼我建議以上,但與g
(全局)標誌:
string.replace(/(\D)(\d)/g,'$1_$2')
首先,'[A-Z]'不符合你想要的,'[a-zA-Z]'會。其次,您沒有使用您設置的捕獲組,您正在替換所有組件。第三,'+'字符意味着一個或更多,但在你的情況下,這並不重要,所以刪除它。此外,'\ d'特殊字符將匹配所有數字,可代替'[0-9]' – TheZ 2012-08-13 20:16:10
感謝您的解釋,非常有幫助 – gray 2012-08-13 21:03:31