Как использовать RegEx в Dart?

в приложении Flutter мне нужно проверить, соответствует ли строка определенному регулярному выражению. Однако регулярное выражение, которое я скопировал из JavaScript-версии приложения всегда возвращает false в приложении Flutter. Я проверил на regexr что регулярное выражение действительно, и это самое регулярное выражение уже используется в приложении JavaScript, поэтому оно должно быть правильным.

любая помощь приветствуется!

регулярное выражение : /^WS{1,2}://d{1,3}.d{1,3}.d{1,3}.d{1,3}:56789/i

Тестовый Код :

RegExp regExp = new RegExp(
  r"/^WS{1,2}://d{1,3}.d{1,3}.d{1,3}.d{1,3}:56789/i",
  caseSensitive: false,
  multiLine: false,
);
print("allMatches : "+regExp.allMatches("WS://127.0.0.1:56789").toString());
print("firstMatch : "+regExp.firstMatch("WS://127.0.0.1:56789").toString());
print("hasMatch : "+regExp.hasMatch("WS://127.0.0.1:56789").toString());
print("stringMatch : "+regExp.stringMatch("WS://127.0.0.1:56789").toString());

выход :

allMatches : ()
firstMatch : null
hasMatch : false
stringMatch : null

1 ответов


Я думаю, вы пытались включить параметры в строку необработанного выражения, пока у вас уже есть параметры для регулярного выражения (/i для нечувствительности к регистру объявляется как caseSensitive: false).

// Removed /i at the end
// Removed / in front - Thanks to Günter for warning
RegExp regExp = new RegExp(
  r"^WS{1,2}:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:56789",
  caseSensitive: false,
  multiLine: false,
);
print("allMatches : "+regExp.allMatches("WS://127.0.0.1:56789").toString());
print("firstMatch : "+regExp.firstMatch("WS://127.0.0.1:56789").toString());
print("hasMatch : "+regExp.hasMatch("WS://127.0.0.1:56789").toString());
print("stringMatch : "+regExp.stringMatch("WS://127.0.0.1:56789").toString());

выдает:

allMatches : (Instance of '_MatchImplementation')
firstMatch : Instance of '_MatchImplementation'
hasMatch : true
stringMatch : WS://127.0.0.1:56789