2015-09-04 22 views
1

我需要一個正則表達式或任何其他方法來增加數字和字母之間的空格中的字符串之間的空白。JS字符串:添加數字和字母

例子:

"E2356" => "E 2356" 
"E123-F456" => "E 123-F 456" 

我已經能夠找到它的正則表達式,但它是不可能的JavaScript:

(?<=[^0-9])(?=[0-9]) 

謝謝!

回答

3

匹配字母后跟數,用捕獲基團的字母和數字二者,然後使用String#replace$1$2佔位符來指代捕獲基團的含量的兩個字符序列,在它們之間具有空間。

str.replace(/([^0-9])([0-9])/g, '$1 $2') 
       ^^$1^^ ^^$2^ 

g標誌確保所有出現被替換,當然。

5

取而代之的是向後看,只要符合非數字:

[^0-9](?=[0-9]) 

,並以 「& $」 代替。

[^0-9]子模式將匹配1個字符,該字符不是可以在替換模式中用$&(整個匹配的文本)引用的數字。 (?=[0-9])先行將確保它後面有一個數字。

參見demo

var re = /[^0-9](?=[0-9])/g; 
 
var str = 'E2356<br/>E123-F456'; 
 
var result = str.replace(re, '$& '); 
 
document.write(result);

+0

當然可以,但什麼是在尋找反超的時候,你可以只匹配它,而不是數量的優勢在哪裏? – 2015-09-04 07:32:18

+0

@torazaburo:我不認爲有任何優勢。我只是應用了一個必要的改變,以使模式在JS中工作。其他更改不是必需的,但肯定有可能。我已經重申了我的答案,擺脫任何捕捉組織來保持它「更清潔」。 –

+0

@ArjunaWenzel:請檢查我的答案,它是否適合你?這是一個真正的可惜的JavaScript不支持後視,但有很多變通沒有那麼糟糕,捕獲/匹配進一步匹配處理在JS中非常方便(特別是當我們不需要重疊匹配時) 。在這種情況下,我們甚至不需要'replace'中的回調函數的任何複雜性,因爲這個模式真的是「透明的」。 –

1

String#replace使用:

'E123-F456'.replace(/([A-Z])(\d)/g, '$1 $2') 
// >>> "E 123-F 456" 

$1$2是所捕獲的組從正則表達式和用空格分開。該表達式假定您只有大寫字符。請記住將g標誌添加到您的表達式以替換每個出現的位置。

-1

下面的代碼

var test = "E123-F456".match(/[a-zA-Z]+|[0-9]+/g); 
console.log(test.join(' ')); 

小提琴嘗試http://jsfiddle.net/anandgh/h2g8cnha/

+0

這似乎既破壞連字符,也將空間放在錯誤的地方,如數字後面跟一個字母。你樣品的結果是「E 123 F 456」。 – 2015-09-04 07:29:47

0

使用正則表達式不能格式化字符串。 正則表達式幫助您驗證是否某些字符串遵循表達式描述的語言。

正則表達式可以幫助您捕捉不同的變量字符串的某些部分,然後根據你想獲得所需的輸出格式化。

所以我建議你做這樣的事情:

var data = "E2304" ; 
var regex = ([^0-9])([0-9]*)/g ; 
data.replace(/regex, '$1 $2') ; 
+0

對,正則表達式不能創建或修改字符串,它們只能匹配。然而,當我真正需要的是「我需要一個正則表達式來與'replace'一起使用或者用來格式化這個字符串時,我需要一個正則表達式來格式化這個字符串」,幾乎所有人都知道速記。 – 2015-09-04 07:44:36

相關問題