2016-04-05 66 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将符合。 –