#regex
#регулярное выражение
Вопрос:
У меня есть эта простая строка кода, использующая регулярные выражения, где я хочу заменить фрагменты строк пустым пространством:
newAddress = myAddress.replace(/^.*?(ramp|arterial|majorroad|street amp;|highway amp;|highway|street|street amp;|street amp; highway|arterial amp; street|street amp; arterial|majorroad amp;|majorroad amp; ramp|ramp amp; majorroad|major road|highway amp; majorroad),/gi, '');
но, имея в переменной это:
Highway amp; Contrada Torremuzza, 95121 Catania CT
почему он не удалил часть «highway amp;»?
Комментарии:
1. Он успешно совпадает
highway amp;
с этим регулярным выражением, но,
в конце не может быть сопоставлен, поэтому останавливает его: regex101.com/r/oW5bX62. @OnlineCop на самом деле это ответ
Ответ №1:
Мне кажется, что вам не нужны ни the .*
, ни запятая. Это .*
заставит вас заменить все, что предшествует вашей строке.
Попробуйте только это:
(ramp|arterial|majorroad|street amp;|highway amp;|highway|street|street amp;|street amp; highway|arterial amp; street|street amp; arterial|majorroad amp;|majorroad amp; ramp|ramp amp; majorroad|major road|highway amp; majorroad)
Или, если вы настроены на необычную оптимизацию:
(?:majorroad amp; )?ramp|(?:major r|(?:(?:ramp|highway) amp; )?majorr)oad|(?:highway|majorroad|street) amp;|(?:arterial amp; )?street|(?:street amp; )?(?:arterial|highway)
Просто шучу. Теоретически это более эффективно, но его сложнее поддерживать.
Ответ №2:
Он также пытается сопоставить запятую, вам нужно сделать запятую необязательной или удалить ее в этом случае. Кроме того, если вы не хотите удалить предыдущий текст, а также удалить начало ^
привязки строки и .*?
newAddress = myAddress.replace(/(ramp|arterial|majorroad|street amp;|highway amp;|highway|street|street amp;|street amp; highway|arterial amp; street|street amp; arterial|majorroad amp;|majorroad amp; ramp|ramp amp; majorroad|major road|highway amp; majorroad)/gi, '');
Ответ №3:
Я думаю, что я просто решил сам с:
newAddress = myAddress.replace(/^.*?ramp|arterial|majorroad|street|highway| amp;|,/gi, '');
короче и больше efficient…so по крайней мере, оно будет соответствовать слову плюс amp;
Приветствия, Луиджи