簡體   English   中英

正則表達式從字符串中刪除數字(僅限年份)

[英]regex to remove number (year only) from string

我知道分隔兩個詞的正則表達式如下:

輸入:

'WonderWorld'

output:

'Wonder World'

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

現在我想從字符串中刪除年份格式的數字,應該在上面的代碼中進行哪些更改才能獲得:

輸入

'WonderWorld 2016'

output

'Wonder World'

試試這個:

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

您可以將大寫字母前面的位置(但不包括行的開頭)與\\B(?=[AZ])匹配,並匹配尾隨空格(如果有的話,在結尾前有4位數字)( \\s*\\b\\d{4}\\b )。 在回調中,檢查匹配是否為空,並相應地替換。 如果match為空,我們在大寫字母(=>替換為空格)之前匹配位置,如果不匹配,則匹配年末(=>替換為空字符串)。 由於\\d{4}周圍的\\d{4} \\b字邊界,四位數字塊僅作為整數字匹配。

 var re = /\\B(?=[AZ])|\\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 = /([az])(?=[AZ])|\\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>"; 

這里, ([az])(?=[AZ])匹配並在組1中捕獲一個小寫字母,后面跟一個大寫字母,在回調中,我們檢查組1是否匹配(與group1 ? )。 如果匹配,我們返回group1 +一個空格。 如果沒有,我們在年底匹配年份,並將其刪除。

怎么樣,一個正則表達式做你想要的:

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

把數字和空格分開。

重新編碼@WiktorStribiżew的解決方案:

str可以是任何“WonderWorld 2016”| “OneTwo 1000 ThreeFour”| “Ruby 1999 IamOnline”

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

重新進口

remove_year_regex = re.compile(r[0-9]{4}")

在這里測試正則表達式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM