这个正则表达式如何解释?

时间:2016-03-09 16:23:49

标签: regex express

我对此页面上的示例感到有点困惑:http://expressjs.com/en/guide/routing.html

This route path will match abcd, abxcd, abRANDOMcd, ab123cd, and so on.


app.get('/ab*cd', function(req, res) {
  res.send('ab*cd');
});

在此处输入此示例后:http://regexr.com/

我无法重新创建相同的行为并匹配abxyzcd。

为什么这和正则表达式有什么不同?它的解释方式是什么?

3 个答案:

答案 0 :(得分:2)

ExpressJS语法似乎与标准的RegEx语法不同。

这是该模式的RegEx版本:

Lazy

如果您不使用延迟修饰符(" ?"),您将获得以下结果:

Non-Lazy

我建议进一步研究ExpressJS语法,以了解它们如何区分懒惰& amp;非懒惰的搜索。

答案 1 :(得分:1)

在正常的常规表达中*意味着前面的字符可以匹配0次或更多次,所以使用你给的正则表达式,你可以匹配abbcd和abbbbcd等。

如果你想匹配abrandomcd你可以使用正则表达式ab.*cd 的。表示匹配任何字符,而星号表示匹配任意数字。

据我所知,expressjs页面上的示例使用的是正则表达式而不是regexr或其他普通引擎。

这在文本

中突出显示
  

字符?,+,*和()是其正则表达式的子集   同行。连字符( - )和点(。)按字面解释   通过基于字符串的路径。

在页面上找到。

答案 2 :(得分:1)

你到那里,不是正则表达式,而是包含通配符的字符串。我的正则表达式不是很好,但我相信*的解释方式与正则表达式中.*的解释方式相同。

正如您提供的链接中所述:

  

以下是基于字符串的路径路径的一些示例。

进一步向下看时:

  

基于正则表达式的路径路径示例:

因此,基本上有两种方法可以在路线中创建模式:)