2016-02-26 181 views
3

刪除數(僅適用於年)我知道,分開兩個詞如下正則表達式:正則表達式從字符串

輸入:

'WonderWorld' 

輸出:

'Wonder World' 

"WonderWorld".replace(/([A-Z])/g, ' $1'); 

現在我期待從字符串中刪除年份格式的數字,在上面的代碼中應該做什麼修改得到:

輸入

'WonderWorld 2016' 

輸出

'Wonder World' 
+0

應使用'.replace(/([AZ] [AZ] +)(+)/克, '$ 1 $ 2');'用於分離兩個詞 –

回答

2

可以大寫字母前相配的位置(但不包括行的開頭)用\B(?=[A-Z])並匹配尾隨空格,如果任何與年底前右4位數(\s*\b\d{4}\b )。在回調中,檢查比賽是否爲空,並進行相應更換。如果match爲空,我們在大寫字母(=>替換爲空格)之前匹配位置,如果不匹配,我們在末尾匹配年份(=>替換爲空字符串)。由於\d{4}周圍的\b字邊界,所以四個數字塊只與整個字匹配。

var re = /\B(?=[A-Z])|\s*\d{4}\b/g; 
 
var str = 'WonderWorld 2016'; 
 
var result = str.replace(re, function(match) { 
 
    return match ? "" : " "; 
 
}); 
 
document.body.innerHTML = "<pre>'" + result + "'</pre>";

類似的方法,只是不同的模式匹配粘字(可能會變成更可靠):

var re = /([a-z])(?=[A-Z])|\s*\b\d{4}\b/g; 
 
var str = 'WonderWorld 2016'; 
 
var result = str.replace(re, function(match, group1) { 
 
    return group1 ? group1 + " " : ""; 
 
}); 
 
document.body.innerHTML = "<pre>'" + result + "'</pre>";

這裏,([a-z])(?=[A-Z])比賽並捕獲到組中1小寫字母后跟一個大寫字母,在回調中,我們檢查組1是否匹配(與group1 ?)。如果匹配,我們返回group1 +一個空格。如果不是,我們在年底匹配並刪除它。的@WiktorStribiżew的解決方案

+0

我建議的解決方案基於假設,與您的假設相同。 Mine認爲只能刪除字符串末尾的一年(4位數字)。如果不是,'$'應該用'\ b'替換。這是一個**正則表達式解決方案**,我只是在'|'運算符的幫助下添加*替換*。所有替換都是在處理* 1 *正則表達式時完成的,因此它是1-regex傳遞。 –

+1

其可行的解決方案,我改變$與\ b傳遞'WonderWorldGoodHlu 0000 FrankyDrank',謝謝 –

+0

感謝您的精度,我更新了答案,按預期工作。 –

1

這個怎麼樣,一個正則表達式做你想要什麼:

"WonderWorld 2016".replace(/([A-Z][a-z]+)([A-Z].*)\s.*/g, '$1 $2'); 
"Wonder World" 

從數字和空格分開得到的一切。

+0

什麼' WonderWorld NEW!'?它不會以一年結束,但「NEW」將被刪除。請參閱[演示](https://regex101.com/r/bG3fR8/1) - 此解決方案不起作用。請修復。 –

+0

不,「WonderWorld 2016a」與我的解決方案完美配合 - >「Wonder World 2016a」。由於不是一年,最終的'2016a'不會被刪除。一年是一個4位數字,不是一串字母數字。您的解決方案刪除*最後的所有*。 @ Zeeschan:你確定這是需要的嗎? –

+0

你的正則表達式只適用於2個字符串它不是通用的,順便說一句,謝謝。 –

2

試試這個:

"WonderWorld 2016".replace(/([A-Z])|\b[0-9]{4}\b/g, ' $1') 
+0

@bureaquete我已經修改它是一個正則表達式 – Adam

+0

'WonderWorldGoodHlu 0000 FrankyDrank'失敗了您的正則表達式 –

0

重碼:

str可以是任何 「的WonderWorld 2016」 | 「OneTwo 1000 1000 ThreeFour」| 「紅寶石1999 IamOnline」

str.replace(/([a-z])(?=[A-Z])|\s*\d{4}\b/g, function(m, g) { 
    return g ? g + " " : ""; 
});