为什么这个正则表达式/ ^(?:(?:^(like)(ly | s)?$))/匹配单词一样?

时间:2015-08-22 19:01:49

标签: regex

我正在尝试匹配单词的形式。具体来说,我想要一个匹配

的正则表达式
  • 可能
  • 喜欢

这是我目前的正则表达式。

/^(?:(?:^(like)(ly|s)?$))/i

当我在我的javascript控制台中运行它时,它匹配上面三个单词。但是,出于某种原因,它也匹配“相似”一词。具体来说,它匹配相似的“喜欢”部分。我在开头放入\ b以确定它没有匹配。

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:0)

您可以将正则表达式简化为:

/\blike(?:ly|s)?\b/i

RegEx Demo

正则表达式中的问题是使用(like)*,这也会使它与空字符串匹配。

答案 1 :(得分:0)

删除中间的星号,使用以下正则表达式。

var page = require('webpage').create();
page.content = '<html><body></body></html>';

page.includeJs('http://d3js.org/d3.v3.min.js', function() {
    var html = page.evaluate(function() {
        var body = d3.select('body');
        var svg = body.append('svg');
        svg.append('rect');
        svg.append('circle');
        var s = new XMLSerializer();
        return s.serializeToString(document.querySelector('svg'));
    });
    console.log(html);
    phantom.exit();
});

See它在行动。