3

我最近开始学习正则表达式。我现在有一个小问题陈述。

我有这样的模式

var pattern = /^(?:hawaian(?:beach|pizza|hotel))$/gim;
var text = "hawaian hotel is near hawaian beach. In the hawaian hotel they sell hawaian pizza";

我想在本文中实际匹配夏威夷酒店、夏威夷海滩和夏威夷披萨。

但是这种模式只在 hawaiianhotel 这样的条件下才回归真实 || 夏威夷海滩|| 夏威夷披萨。

所以我试过这样

 var text = "hawaianhotel is near hawaianbeach. In the hawaianhotel they sell hawaianpizza";

但这也行不通。

只有这个在工作

var matches = pattern.exec('hawaian*');
4

3 回答 3

3
(?:hawaiian[ ](?:beach|pizza|hotel)) 

这将匹配夏威夷披萨

请注意 [ ],例如,如果您想匹配 hawaiian2hotel,您将执行 [0-9] 或 [2],或者如果您想匹配“hawaiian(任意数量的空间)酒店”,您将执行 []*(零个或多个) 或 [ ]+(一个或多个)

另外,这是一个很棒的工具 http://iblogbox.com/devtools/regexp/

于 2012-11-27T19:55:26.593 回答
2

您的模式使用字符串锚点的开头和结尾,因此只有当模式与整个字符串匹配时,您才会匹配字符串。删除^and$你应该没问题。请注意,我还添加了一个空格,以便您可以匹配“hawaian hotel”而不是“hawaianhotel”。

var pattern = /(?:hawaian (?:beach|pizza|hotel))/gim;
于 2012-11-27T19:53:32.377 回答
0
var pattern = /(?:hawaian[ ](?:beach|pizza|hotel))/gim;
于 2012-11-28T00:08:54.243 回答