2016-09-22 67 views
2

我試圖用相應的值替換不同的設置字符。例如每一個<被一個#U34替換,每一個$被替換爲#89。用不同的值替換多個不同的字符javascript

我有一個隨機拋出的字符數組。例如:

var arr = [ 
'uisdhfu<', 
'u$$fd<' 
] 

到目前爲止,我想通了,我可以這樣做:

var replace = /</ig; 
    var newString = textWithCharacters.replace(replace, '#U34'); 

,但是這似乎是它只能在一次一個字符來完成。如果我想要做多個我似乎需要每次創建一個新的字符串。有沒有一種方法可以一氣呵成呢?也許用循環和if語句?但我似乎無法弄清楚我將如何定義循環的條件。

+1

您可以匹配多個不同的字符,並使用代替函數根據匹配動態決定插入的內容。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace – Bergi

回答

5

.replace()方法接受獲取傳遞匹配的字符串(如'<')的第二個參數的函數,並返回替換文本(例如'#U34')。

所以,你可以做這樣的事情:

var replacementMap = { 
    '<': '#U34', 
    '$': ')#89' 
} 

// Create a RegExp to match any of the characters that are used as keys in the map. 
// For this example, this RegExp is the same as /[<$]/gi 
// Note: this method of creating a RegExp may not work with certain characters such 
// as -, ], or \ 
var replace = new RegExp('[' + Object.keys(replacementMap).join('') + ']', 'ig'); 

function getReplacementString(input) { 
    return replacementMap[input]; 
} 

var newString = textWithCharacters.replace(replace, getReplacementString); 
+1

就像一個魅力。感謝教我如何做到這一點 – sourlemonaid

0

您可以使用許多字符是這樣的:(使用

.replace(/(x|y|z)/, '') 
1

你可以有你要替換,然後字符列表傳遞一個函數到替代方法,因此有正確的映射替換你的對手。事情是這樣的:

var arr = [ 
 
'uisdhfu<', 
 
'u$$fd<' 
 
]; 
 
var mapping = { 
 
    "$":")#89", 
 
    "<":"#U34", 
 
}; 
 
var regex = new RegExp(Object.keys(mapping).map((key)=>"\\"+key).join("|"),"g"); 
 
var results = arr.map((string)=>string.replace(regex,(match)=>mapping[match])); 
 
console.log(results);

0

你想是這樣的(運行段和期待的console.log)

這裏HTML號碼的清單:http://www.ascii.cl/htmlcodes.htm

好玩: )

var array = ['#!toto','&#(i u%','$mpo*+']; 
 

 
var symbol = [' ','!','"','#','$','%','&',"'",'(',')','*','+',',','etc...']; 
 

 
console.log(array); 
 

 
for(var i = 0; i < array.length ; i++){ 
 
     
 
     var temp = ''; 
 
     for(var j = 0; j < array[i].length ; j++){ 
 
      
 
      var index = symbol.indexOf(array[i][j]); 
 

 
      if(index != -1){ 
 
      temp = temp + '&#'+(32+index); 
 
      } 
 
      else{ 
 
       temp = temp + array[i][j]; 
 
      } 
 
     } 
 
     array[i] = temp; 
 
} 
 

 
console.log(array)

+0

我已經接受了另一個讓工作順利完成的答案。非常感謝。從這裏學到了很多東西 – sourlemonaid

+0

不客氣;) –

相關問題