Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярные выражения (https://javascript.ru/forum/misc/77939-regulyarnye-vyrazheniya.html)

abadon 05.07.2019 00:51

регулярные выражения
 
Здравствуйте, я ни как не могу разобраться с выражениями, в общем мне надо найти ссылку в коде и заменить некоторые элементы в ней, я нашел некоторый материал ознакомился и сделал для поиска вот такое выражение
Код:

/<a.+href=('|")\/\?(&|)(\w+(=|)(.+|))('|")>/g
но вот эта часть может повторятся
Код:

(&|)(\w+(=|)(.+|))
вот пример ссылки которую надо найти
Код:

<a class='small minor' href='/?chat=$chat[id]&del_komm=$post[id]'>
и мне нужно заменить символы "&" на "-" и символ "=" на "-" и удалить знак "?"
но про замену вообще не чего не нашел в гугле, хотя я слышал что как то можно вытаскивать части текста и вставлять,
в итоге должна быть ссылка такого вида
Код:

<a class='small minor' href='/chat-$chat[id]/del_komm-$post[id]'>
Подскажите как это можно сделать и где мне вообще найти информацию про замену так как ее вообще нет ни где :(

abadon 05.07.2019 01:11

я вот знаю что повторение обозначается так {.+} одно или более но оно не работает я пробовал так
/<a.+href=('|")\/\?((&|)(\w+(=|)(.+|))){.+}('|")>/g

в ссылке же может быть много переменных
/?val=1&name=zuko&num=142
и так как я не знаю сколько значений то нужно повторять и сделать новую ссылку

рони 05.07.2019 01:23

abadon,
<body>


<script>
  let str = "<a class='small minor' href='/?chat=$chat[id]&del_komm=$post[id]'>"
  str = str.replace(/(<a.+href=['"])([^"']+)/g, function(a,b,c) {
  return b + c.replace("?","").replace(/[=&]/g, "-")
})
document.body.append(str)
</script>


</body>

Malleys 05.07.2019 02:40

abadon, может не нужно при помощи регулярных выражении, если есть элементы!

<a class="small minor" href="/?chat=$chat[id]&del_komm=$post[id]"></a>
<a class="small minor" href="/?val=1&name=zuko&num=142"></a>

<!-- Для примера, чтобы было видно заменённые адреса ссылок -->
<style>a::before { content: attr(href); display: list-item; }</style>

<script>

function cleanLink(link) {
	var url = new URL(link.href, location);
	var path = Array.from(url.searchParams, ([...pair]) => pair.join("-")).join("/");
	url.search = "";
	url.pathname += path;
	link.href = url.href.replace(location.origin, "");
	return link;
}

for(const link of document.querySelectorAll("a.small.minor")) {
	cleanLink(link);
}

</script>

abadon 05.07.2019 11:03

Спасибо, мне именно регулярные выражения нужны были так как я их не понимаю и хочу их выучить.


Часовой пояс GMT +3, время: 22:25.