2012-05-22 56 views
2

如何使用Javascript格式化字符串以匹配正則表達式?使用正則表達式重新格式化包含英國郵政編碼的字符串

我使用英國的郵政編碼可能符合以下任一

N1 3LD 
EC1A 3AD 
GU34 8RR 

我有以下的正則表達式,其正確驗證字符串,但我不確定如何使用正則表達式作爲一個掩碼格式EC1A3ADEC1A 3AD/GU348RRGU34 8RR/N13LDN1 3LD

我的正則表達式是/^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/

感謝您通過可選的空格分隔位左右

+0

你怎麼正好與 「如何使用正則表達式作爲掩膜」 是什麼意思? – fcalderan

+0

我希望能夠轉換字符串以匹配正則表達式。例如。如果我有一個正則表達式來驗證字符串匹配,我想能(主要是在這種情況下,插入的郵政編碼的相關部分的空間)相應格式的字符串 –

回答

10

如果使用正則表達式/^([A-Z]{1,2}\d{1,2}[A-Z]?)\s*(\d[A-Z]{2})$/可以提取郵政編碼的兩個部分,並與居間空間重新組合。

var list = ['N13LD', 'EC1A3AD', 'GU348RR']; 

for (var i = 0; i < list.length; i++) { 
    var parts = list[i].match(/^([A-Z]{1,2}\d{1,2}[A-Z]?)\s*(\d[A-Z]{2})$/); 
    parts.shift(); 
    alert(parts.join(' ')); 
} 

輸出

N1 3LD 
EC1A 3AD 
GU34 8RR 
+0

這使得它的白癡證明和工作,不需要考慮,謝謝你。 –

+0

@PaulChopsHelyer你不應該避免思考,這就是爲什麼我沒有給你提供一個完整功能的勺子 – Alnitak

+2

謝謝Alnitak,但是我的「沒有想法」的評論可能有點輕率和錯誤地採用。我同時看到和學習​​,如果你覺得這不是辦法,但是花了幾個毫無結果的時間試圖拼湊一些我不明白的例子,現在已經l了編輯我能夠適應鮑羅廷的例子,以適應我的要求。再次感謝您的幫助,真的很感激。 –

1

戴上牙套:

/^([A-Za-z]{1,2}[0-9A-Za-z]{1,2})[ ]?([0-9]{0,1}[A-Za-z]{2})$/ 

不過,我覺得正則表達式是錯誤的......上面正則表達式分裂「N13LD」爲「N13」,「LD」。

我懷疑出錯的部分是兩個尾字母前{0,1} - 必須AFAIK是恰好有一個數字有:

var re = /^([A-Z]{1,2}[\dA-Z]{1,2})[ ]?(\d[A-Z]{2})$/i; // case insensitive 

分組允許string.match(regexp)函數返回一個結果,其中包括每個條目匹配組:

> "N13LD".match(re); 
["N13LD", "N1", "3LD"] 

> "GU348RR".match(re); 
["GU348RR", "GU34", "8RR"] 

> "EC1A3AD".match(re); 
["EC1A3AD", "EC1A", "3AD"] 

爲了得到您的結果,只需使用普通字符串連接來將每個結果的第2個和第3個元素連接在一起。

+0

謝謝參宿一, 那麼語法將我用你的例子從「N13LD」中獲得一串「N1 3LD」? –

+0

@PaulChopsHelyer只取第二和第三元件從).match的'結果('。 – Alnitak

+0

這指出了我的正則表達式中的一個缺陷,謝謝。鮑羅廷似乎沒有歸屬地抄 –

相關問題