js*.js
でなどのシェルワイルドカードを使ってタイトルを検索したいです。*.*.*
問題は、タイトルのリストをループして、js 正規表現テストを使用してファイルをフィルタリングする必要があることです。シェルのワイルドカードを適切な方法で正規表現に変換するにはどうすればよいですか、または既にそれを行っているライブラリはありますか?
注: シェルのワイルドカードから正規表現への汎用コンバーターが必要です。
js*.js
でなどのシェルワイルドカードを使ってタイトルを検索したいです。*.*.*
問題は、タイトルのリストをループして、js 正規表現テストを使用してファイルをフィルタリングする必要があることです。シェルのワイルドカードを適切な方法で正規表現に変換するにはどうすればよいですか、または既にそれを行っているライブラリはありますか?
注: シェルのワイルドカードから正規表現への汎用コンバーターが必要です。
汎用コンバーター関数が必要な場合は、次のように動作するはずです。
function globStringToRegex(str) {
return new RegExp(preg_quote(str).replace(/\\\*/g, '.*').replace(/\\\?/g, '.'), 'g');
}
function preg_quote (str, delimiter) {
// http://kevin.vanzonneveld.net
// + original by: booeyOH
// + improved by: Ates Goral (http://magnetiq.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// + improved by: Brett Zamir (http://brett-zamir.me)
// * 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'), '\\$&');
}
(ここからの preg_quote 関数: http://phpjs.org/functions/preg_quote/ )。
使用する:
var realRegex = globStringToRegex("2012-*-*.js"); //returns a RegExp object of /2012\-.*\-.*\.js/g
これが動作するJSフィドルです:
次に、RegExp オブジェクトを使用して一致させることができます。
if (yourString.match(realRegex)) { //do something
更新?
:単一のワイルドカード文字をサポートします。
基本的に、これは文字列全体を非正規表現に変換し、*
が にマップされ.*
、?
にマップされることを確認するだけ.
です。これらは同等であるためです。
これはかなり近いはずです。
yourVar.match(/.*\.js$/i)
意味
.*
.js
て最後に\.js$
/i
ブール値の結果を取得するために regexp を使用した場合 (一致結果が必要ない場合)、testメソッドを使用することをお勧めします。
/.*\.js$/i.test(yourVar)