Регулярное выражение для регулярных выражений в Dart

#javascript #dart

#javascript #dart

Вопрос:

В JavaScript у меня есть следующее:

 function escape(text)
{
var tx = text.replace(/[amp;<>"']/g);
}
 

У меня возникли проблемы при попытке сделать то же самое на Dart:

 var reg = new RegExp("/[amp;<>"']/g"); -->this throws error.
 

Как я могу получить эквивалентное выражение?

Ответ №1:

Источник регулярных выражений Dart не используется / для разграничения регулярных выражений, это просто строки, передаваемые RegExp конструктору. Обычно рекомендуется использовать «необработанную строку», потому что обратная косая черта означает что-то в регулярных выражениях, а также в необработанных строковых литералах, и регулярное выражение JavaScript /rn/ будет RegExp("\r\n") в Dart без необработанных строк, но RegExp(r"rn") с необработанной строкой, гораздо более читаемым. В данном конкретном случае, когда строка содержит оба ' и " , это становится сложнее, но вместо этого вы можете использовать «многострочную строку» — в качестве разделителей используются символы тройных кавычек, поэтому они могут содержать символы одинарных кавычек без экранирования (на самом деле это не обязательно должно занимать несколько строк).

У Dart нет чего-то похожего на g флаг регулярных выражений JavaScript. Регулярные выражения Dart не имеют состояния, именно функции, использующие их, должны заботиться о том, чтобы запомнить, где они совпадают, а не само регулярное выражение. Итак, нет необходимости в g .

Итак:

 RegExp(r"""[amp;<>"']""");
// or 
RegExp(r'''[amp;<>"']''');
 

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

 RegExp("[amp;<>"']");
// or 
RegExp('[amp;<>"']');
 

Если вы делаете это, когда ваше регулярное выражение использует обратную косую черту регулярного выражения, вам нужно будет удвоить обратную косую черту, что легко забыть, поэтому рекомендуется использовать необработанные строки.

Комментарии:

1. Спасибо за полный ответ, я обязательно попробую.

Ответ №2:

Вы забыли экранировать двойные кавычки

 new RegExp("/[amp;<>"']", 'g');