2017-07-02 85 views
-1

我有一個很長很長包含字符串的話就像mushr0ommong0lianc0rn,等等。我想「用o S」 s到更換0。我知道input.replace('0', 'o')可能工作,但在同一個字符串中,它也包含像70,100,1082這樣的數字,我不希望replace方法影響它們。我可以使用正則表達式來做到這一點嗎?如何更換由字母字符包圍的數字字符的字符串

+0

就請使用isNaN()來檢查,如果它不是一個數字 – amrit

+0

@amrit但正如我剛纔所說,他們都在同一個字符串這樣的存在:'mushr0om 70 mong0lian 100 1082 '。使用'isNaN()'會影響整個字符串。 – Bargain23

+1

使用str.split(「」)將字符串拆分爲一個子字符串數組,然後使用isNaN()檢查它是否不是數字,然後替換... – amrit

回答

2

var string = "mushr0om 70 bl00m 102" 
 

 
var cleanString = string.split(' ').map((word)=>{ 
 

 
    if(! /^\d+$/.test(word)){ return word.replace(/0/g,'o')} 
 
    
 
    return word 
 

 
}).join(' ') 
 

 
console.log(cleanString);

+0

完美地工作。 – Bargain23

1

您可以檢查(上一個和下一個字符)每個字符。如果一個字符是一個數字,那麼檢查它是否是prev。或下一個字符是非數字。如果任何prev。或者下一個字符是非數字然後替換。

  • 但如果你設置那麼你所需的字符串有一個像「mongolia007」任子解決方案變得棘手。但對於上面的簡單情況,解決方案應該可行
1

我想你想替換所有「0」,這之前的字母而不是數字,也是一個字母而不是數字。

將你的字符串拆分成一個char數組,然後替換你想要的字符。

var str = 'Twas th0e ni0ght befo100re Xm305as...'; 
var char = str.split(''); 
for(var i=0; i<str.length; i++){ 
    if((i==0 || char[i] != " ") && ! isNaN(char[i]) && isNaN(char[i+1])) 
     char[i] = 'o'; 
    else if(isNaN(char[i-1]) && ! isNaN(char[i]) && (char[i] != " " || i+1 == str.length)) 
     char[i] = 'o';   
    else if(isNaN(char[i-1]) && ! isNaN(char[i]) && char[i] != " " && isNaN(char[i+1])) 
     char[i] = 'o'; 

    document.getElementById("demo").innerHTML = document.getElementById("demo").innerHTML + char[i]; 
} 
1

如果我明白了,你只需要更換髮生字符,而不是0之間的0在實際數字像900。正則表達式下方會創建三個組,其中兩個用於字符,另一個夾在零之間。然後我們使用$1選擇第一組(0之前的字符),並使用$3選擇第二組(0之後)。 0被替換爲o

var str = "mushr0om, mong0lian, c0rn - 700 hello909"; 
 
var str1 = str.replace(/([a-zA-Z])(0)([a-zA-Z])/ig, "$1o$3"); 
 
document.getElementById("dvOne").innerText = str1;
div { 
 
    padding: 25px; 
 
    color: red; 
 
    font-size: 16px; 
 
}
<div id="dvOne"> 
 
</div>

相關問題