【发布时间】:2018-09-21 18:16:57
【问题描述】:
我做了一个通配符过滤例程来匹配使用通配符的文件名。例如:*.js 给我一个目录下的所有 js 文件。
但是,当目录中有.json 文件时,我也会得到这些。我明白为什么,但这不是我想要的。
我使用这个(从网站上挑选的)wildcardStringToRegexp 函数来构建正则表达式(因为我不擅长这个):
function wildcardStringToRegexp( s )
{
if( isValidString( s ))
{ return false; }
function preg_quote(str, delimiter)
{
// * example 1: preg_quote("$40");
// * returns 1: '\$40'
// * example 2: preg_quote("*RRRING* Hello?");
// * returns 2: '\*RRRING\* Hello\?'
// * example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
// * returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:'
return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
}
return new RegExp(preg_quote(s).replace(/\\\*/g, '.*').replace(/\\\?/g, '.'), 'g');
}
function fnmatch( sMask, sMatch, bReturnMatches )
{
if( !isValidString( sMatch ))
{ return false; }
var aMatches = sMatch.match( wildcardStringToRegexp( sMask ) );
if( bReturnMatches )
{ return isValidArray( aMatches )?aMatches:[]; }
return isValidArray( aMatches )?aMatches.length:0;
}
例如:
fnmatch( '*.js', 'myfile.js' ) returns 1
fnmatch( '*.js', 'myfile.json' ) returns 1 , this is not what I want
如何更改wildcardStringToRegexp() 函数,或者我需要更改什么fnmatch( '*.js', 'myfile.json' ) 是不可能的,无效所以fnmatch 更精确?
【问题讨论】:
-
不起作用,一无所获
标签: javascript regex string pattern-matching match