Проблема заключается в удалении всей строки запроса после того, как '-' используется в URL-адресе - PullRequest
0 голосов
/ 18 июня 2020

Здесь я удаляю строку запроса из URL-адреса, используя регулярное выражение в juery. Есть два флажка, и в соответствии с требованием, когда я удаляю строку запроса из URL-адреса, один из флажков не установлен.

Например, мой URL-адрес выглядит так:

http://localhost/boat/frontend/boat_listing/loadRecord?fuels=Gasoline&engines=Jet-Drive

Здесь, если я хочу удалите строку запроса «двигатели» и хотите оставаться «топливом», она работает нормально и становится URL-адресом, например:

http://localhost/boat/frontend/boat_listing/loadRecord?fuels=Gasoline

Но когда мой URL-адрес выглядит так:

http://localhost/boat/frontend/boat_listing/loadRecord?engines=Jet-Drive&fuels=Gasoline

И я хотите удалить строку «двигатели» и оставить «топливо», она удаляет всю строку запроса, и URL-адрес выглядит следующим образом:

http://localhost/boat/frontend/boat_listing/loadRecord

Как я хочу:

http://localhost/boat/frontend/boat_listing/loadRecord?engines=Jet-Drive

Здесь я пробовал:

url.replace(new RegExp(key + "=\\w+"),"").replace("?&","?").replace("&&","&").split('-')[0];

и

new RegExp('[\?&]'+key+'=([^&#]*)').exec(url);

      let length = url.length;
      if(url.charAt(length-1)==='?')
      url = url.slice(0,length-1);

      if(url.charAt(length-1)==='&')
      url = url.slice(0,length-1);

      return url;

Пожалуйста, предложите, что делать?

Примечание. URL-адрес создается динамически.

1 Ответ

1 голос
/ 18 июня 2020

Вероятно, вы можете попробовать следующий код. Очень сложно добиться вашей функциональности с одним регулярным выражением, но я попытался реализовать это с помощью следующего logi c.

Предлагаемая процедура:

1. Create a regex to capture the url in two groups.
2. Filter out the required query string by creating a dynamic regex containing your query string. That is if fuels checkbox is checked then create the regex with fuels string and when engine checkbox is checked then use engine inside the regex.

I использовали следующие регулярные выражения:

(.*?\?)(.*) --> For seperating the url to two strings.
(fuels=[^\\s&]*) --> Dynamic regex for filtering out the required query.

Вы можете найти реализацию предложенной процедуры ниже:

const string = `http://localhost/boat/frontend/boat_listing/loadRecord?engines=Jet-Drive1&fuels=Petrol
http://localhost/boat/frontend/boat_listing/loadRecord?fuels=Petrol&engines=Jet-Drive2
http://localhost/boat/frontend/boat_listing/loadRecord?engines=Jet-Drive3&fuels=Gasolene`;
const regexp = /(.*?\?)(.*)/g;
const dynamicQueryString = "fuels"; // You can pass this string from the checked box directly.
const regex1 = new RegExp('(' + dynamicQueryString + '=[^\\s&]*)', 'g');
let resultString = "";
const matches = string.matchAll(regexp);
    
for (const match of matches) {
  let tempMatch = match[2].match(regex1);
  resultString = resultString.concat(match[1] + tempMatch[0] + "\n");
}
console.log(resultString);
...