2015-05-28 71 views
2

我有一个正则表达式与我想要的不匹配。OCaml |正则表达式运算符

"/.*\\.\\(css\\)\\|\\(js\\)\\|\\(png\\)" 

目前这是匹配:

/static/css/main.css 

但它不匹配:

/static/js/prettify.js 

或者:

/static/img/preview.png 

我会很感激的任何东西我的建议我错过了。谢谢。

+2

加上'\\('和'\\)''周围和css''png'。试试这个'/.* \\。\\(\\(css \\)\\ | \\(js \\)\\ | \\(png \\)\\)' – Maroun

回答

3

让我们来简化你的正则表达式没有特定语言的引用:

.*\.(css)|(js)|(png) 
     ↑ 
[  ]|[ ]|[ ] 

你匹配/static/css/main.css因为第一|应用上的图案.*\.(css)。你应该添加一个括号周围扩展:

.*\.((css)|(js)|(png)) 

现在.*\.捕捉第一部分(扩展名前),然后你正在寻找cssjspng

在你的语言,我认为它会是这样的:

/.*\\.\\(\\(css\\)\\|\\(js\\)\\|\\(png\\)\\) 
+0

太棒了,我会搏一搏。只是好奇,除了我给出的那个例子之外,还有一个例子可以匹配这个正则表达式吗?像什么是一个包含“js”的字符串可以匹配这个正则表达式? – eatonphil

+0

@eatonphil你的正则表达式匹配字符串'png'和'js'。 – Maroun

+0

@eatonphil它匹配上面的字符串,因为在'。* \ .css'和其他之间出现'|',所以如果它不匹配'。* \ .css',它会查找'js'或' png'。 – Maroun