例如,我想匹配 my_very_nice_file.js,我想将它与这些字符(mrie)匹配:
m: my
r: very
i: nice
e: file
如您所见,这些字符后面跟着另一个字符,但它们没有必要放在一起。
就像Sublime Text 2 匹配文件名一样。您可以放置任何字符,但必须跟随另一个。
例子:
我必须用 JavaScript 来做。我该怎么做?
如果有人感兴趣,这是我的问题 GitHub 的结果。
例如,我想匹配 my_very_nice_file.js,我想将它与这些字符(mrie)匹配:
m: my
r: very
i: nice
e: file
如您所见,这些字符后面跟着另一个字符,但它们没有必要放在一起。
就像Sublime Text 2 匹配文件名一样。您可以放置任何字符,但必须跟随另一个。
例子:
我必须用 JavaScript 来做。我该怎么做?
如果有人感兴趣,这是我的问题 GitHub 的结果。
一个简单的模式就是:m.*r.*i.*e.*
. 但是,我假设您不仅要匹配扩展名为 .js 的文件,而且模式匹配应该只匹配文件名而不匹配其扩展名。在这种情况下,如果您的扩展程序包含这些字符中的任何一个,则简化模式会造成麻烦。
深思:下面的模式呢?
m[a-z0-9\-_]*?r[a-z0-9\-_]*?i[a-z0-9\-_]*?e[a-z0-9\-_]*?\.[a-z]+
简要说明该模式的作用:
但是,该模式还假设您只想接受字母数字和下划线字符。如果您想包含其他字符,您可以在方括号之间添加更多符号(但请记住转义重要的字符)。
要在 JS 中进行匹配,可以使用:
var patt = /m[a-z0-9\-_]*?r[a-z0-9\-_]*?i[a-z0-9\-_]*?e[a-z0-9\-_]*?\.[a-z]+/gi;
if(fileName.match(patt)) {
// If there is a match
} else {
// If there is no match
}
[编辑] OP 询问是否可以将突出显示的字符加粗。我建议使用该.replace()
功能:
var patt = /m([a-z0-9\-_]*?)r([a-z0-9\-_]*?)i([a-z0-9\-_]*?)e([a-z0-9\-_]*\.[a-z]+)/gi;
var newFileName = fileName.replace(patt, "<strong>m</strong>$1<strong>r</strong>$2<strong>i</strong>$3<strong>e</strong>$4");
为了完整起见,这里是一个概念验证小提琴;)
我认为这就是你所需要的:
m.*r.*i.*e