例如,我想匹配my_very_nice_file.js,我想将它与这些字符匹配(mrie):
m: my
r: very
i: nice
e: file
如您所见,这些字符后面跟着另一个字符,但它们不是必需的。
就像Sublime Text 2匹配文件名一样。你可以放任何角色,但必须跟随另一个角色。
示例:
我必须在JavaScript中完成它。我该怎么办?
如果有人有兴趣,请点击the result of my question GitHub。
答案 0 :(得分:3)
一个简单的模式就是: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");
为了完整起见,这里是proof-of-concept fiddle;)
答案 1 :(得分:1)
我认为这就是你所需要的:
m.*r.*i.*e