Dart RegExp单词边界等效

时间:2019-05-11 12:39:25

标签: regex dart flutter

我尝试在我的flutter应用程序中匹配恰好包含单词“ world”的单词和句子。我认为最好的方法是使用单词边界。我的正则表达式如下:

String str = "world";
var regexp = RegExp("\b($str)\b", caseSensitive: false);

但是它不起作用。这是输出:

regexp.hasMatch("Hello World"); //false
regexp.hasMatch("World"); //false
regexp.hasMatch("worlds"); //false as expected

\ b在Dart中不起作用吗?有谁知道如何实现期望的行为?我找不到有关此的任何信息。

谢谢。

1 个答案:

答案 0 :(得分:2)

来自飞镖regex documentation

  

Dart正则表达式与JavaScript正则表达式具有相同的语法和语义。

如果您在JavaScript中使用RegExp,则单词边界实际上将由\\b表示,即我们需要向\b单词边界添加一个额外的转义符:

String str = "world";
var regexp = RegExp("\\b($str)\\b", caseSensitive: false);
regexp.hasMatch("Hello World"); // true

请注意,通常应尽可能避免使用RegExp,而应使用正则表达式文字。这样做的原因是文字放松了,并使regex语法更简单。