Регулярное выражение не работает

#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/oW5bX6

2. @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;

Приветствия, Луиджи