#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: Да, вы правы. Я не упомянул об этом, потому что в коде операционной системы нет специальных символов, но я должен был упомянуть…