Объединить / упростить RegExp - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть этот рабочий RegExp в моем файле JavaScript:

var reA = new RegExp(urlValueToRemove);
var reB = new RegExp('(,&)');
var reC = new RegExp('(,,)');
var reD = new RegExp('(=,)');
var reE = new RegExp('(,$)');

window.history.pushState(null, null, decodeURIComponent(window.location.search).replace(reA, '').replace(reB, '&').replace(reC, ',').replace(reD, '=').replace(reE, ''));

Возможно ли объединить / упростить это, чтобы мне не нужно было делать replace 5 раз?

Я спрашивал об этом в сообществе codereview, но там никого нет, поэтому я думаю, что мне нужно ждать там несколько дней.

Пример

Когда у меня естьэтот URL здесь:

http://localhost.com/?color=Red,Blue,Green&size=X,L,M,S

Когда я хочу удалить Green из URL, я могу передать Green первому регулярному выражению reA и он удаляется из URL:

http://localhost.com/?color=Red,Blue&size=X,L,M,S

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать группу захвата, чтобы указать, что следует сохранить, и объединить два случая с |: в одном случае необходимо сохранить символ, который предшествует слову (например, =)другое, что следует слово (например, &):

function removeWord(url, text) {
    const re = new RegExp(`,${text}(&|,|$)|(=)${text},`, 'g');
    return url.replace(re, '$1$2');
}

const url = "http://localhost.com/?color=Red,Blue,Green&size=X,L,M,S"
console.log(removeWord(url, "Green"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...