2015-05-28 117 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