2016-04-05 109 views
-1

我試圖用字母數組替換字符串中的字母。替換字母dynamic

我在做什麼,到目前爲止是

var value = '00-.Tday(52)' 
if(!textService.containsLettersExcept(value, ['t', '.', '-'])){ 
    // yay 
} 

     function containsLettersExcept(text, exceptions){ 
      console.info('text before : ', text) 
      for(var i = 0; i< exceptions.length; i++){ 
       var char = exceptions[i]; 
       text = text.replace(/char/gi, ''); 
      } 
      console.info('text : ', text) 
      return text.match(/[a-z]/i); 
     } 

然而,這嘗試刪除該字符串「字符」,而不是從字符串text

+2

'text.replace(新正則表達式(炭, 'GI'), '');' –

+1

爲什麼不通過'[t \ .-]'並替換一次? –

+0

我希望能夠與不同的陣列一起使用^^ –

回答

3

使用RegExp構造函數變量char

text = text.replace(new RegExp(char, 'gi'), ''); 

值得注意some characters具有特殊含義,需要轉義以字面處理(例如.必須寫爲\.以表示「字面點」而不是「任何字符」。

備選地,加入字符數組,逃生什麼需要逸出,並執行替換一次:

const exceptionsCharClass = exceptions 
    .map(char => char.replace(/[\.\-\]\[]/, '\\$1')) // escape . - [ and ] 
    .join('');          // join 
const exceptionsPattern = `[${exceptionCharClass}]` 
// exceptionsPattern is now [t\.\-], which you can use to replace once instead of in a loop. 
+0

您是如何設法轉換Wiki回答常規答案?由於鑽石? –

+1

@WiktorStribiżew是的,鑽石津貼。答案開始變得不平凡,所以我推翻了社區維基。普通用戶可以自定義標記自己的答案,以消除CW狀態,在99.99%的情況下,MOD將符合。 –