Javascript .replace() с несколькими вызовами, некоторые с переменными, некоторые с обычным текстом

#javascript #regex #replace

#javascript #регулярное выражение #заменить

Вопрос:

Код:

 var csMasterPrefix = 'CS_',
    cpMasterPrefix = 'CP_',
    csContentPrefix = 'CSContent_',
    cpContentPrefix = 'CPContent_';

/* ... */

$this.attr("id")
    .replace(csMasterPrefix,'')
    .replace(cpMasterPrefix,'')
    .replace(csContentPrefix,'')
    .replace(cpContentPrefix,'')
    .replace('ibtn','')
    .replace('btn','')
    .replace('lbtn','')
    .replace('img','')
    .toLowerCase();
  

Вопрос: Позвольте мне в предисловии сказать, что я рассмотрел решения, в которых говорится о создании вашей собственной «чистой» функции. Мой вопрос на самом деле не в том, как это сделать, а скорее в том, как я могу создать ОДНО регулярное выражение, которое объединило бы все вызовы replace в один?

Ответ №1:

С помощью RegExp оператора выбора | и глобального флага g :

 var to_replace = [csMasterPrefix, ..., 'ibtn', ...];
var id = $this.attr("id").replace(new RegExp(to_replace.join('|'), 'g'), '');
  

Не знаю, является ли это наиболее эффективным решением, но оно будет работать.

В качестве альтернативы вы могли бы выполнить цикл to_replace и выполнить обычную замену строки.

Комментарии:

1. Обратите внимание, что эта функция небезопасна, если to_replace содержит специальные символы, такие как ( и [ , . (и другие). Поскольку идентификатору не разрешено содержать такие символы, вы в безопасности.

2. @Lekensteyn: Да, вы правы. Я не упомянул об этом, потому что в коде операционной системы нет специальных символов, но я должен был упомянуть…