我对此页面上的示例感到有点困惑: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。
为什么这和正则表达式有什么不同?它的解释方式是什么?
答案 0 :(得分:2)
ExpressJS语法似乎与标准的RegEx语法不同。
这是该模式的RegEx版本:
如果您不使用延迟修饰符(" ?
"),您将获得以下结果:
我建议进一步研究ExpressJS语法,以了解它们如何区分懒惰& amp;非懒惰的搜索。
答案 1 :(得分:1)
在正常的常规表达中*意味着前面的字符可以匹配0次或更多次,所以使用你给的正则表达式,你可以匹配abbcd和abbbbcd等。
如果你想匹配abrandomcd你可以使用正则表达式ab.*cd
的。表示匹配任何字符,而星号表示匹配任意数字。
据我所知,expressjs页面上的示例使用的是正则表达式而不是regexr或其他普通引擎。
这在文本
中突出显示字符?,+,*和()是其正则表达式的子集 同行。连字符( - )和点(。)按字面解释 通过基于字符串的路径。
在页面上找到。
答案 2 :(得分:1)
你到那里,不是正则表达式,而是包含通配符的字符串。我的正则表达式不是很好,但我相信*
的解释方式与正则表达式中.*
的解释方式相同。
正如您提供的链接中所述:
以下是基于字符串的路径路径的一些示例。
进一步向下看时:
基于正则表达式的路径路径示例:
因此,基本上有两种方法可以在路线中创建模式:)