3

文字列入力が次のいずれかであるかどうかを検出する小さなスクリプトを作成しようとしています。

1) URL (ファイル名を保持します): ' http://ajax.googleapis.com/html5shiv.js '

2) ファイル名のみ: 'html5shiv.js'

これまでのところ、これを見つけましたが、URL とファイル拡張子をチェックするだけだと思います。「or」チェックを使用する簡単な方法はありますか? 私はRegExpの経験があまりありません。

var myRegExp = /[^\\]*\.(\w+)$/i;

前もって感謝します。

4

8 に答える 8

2

この正規表現はどうですか?

(\.js)$

行末に .js があるかどうかをチェックします。

$行の終わりを示します。

ここでテスト。

于 2013-08-29T22:18:59.760 に答える
1

フロー制御の目的である場合は、次のことができます。

var test = "http://ajax.googleapis.com/html5shiv.js";    

// to recognize http & https
var regex = /^https?:\/\/.*/i;    
var result = regex.exec(test);    
if (result == null){
    // no URL found code
} else {
    // URL found code
}

ファイル名をキャプチャする目的で、次を使用できます。

var test = "http://ajax.googleapis.com/html5shiv.js";    

var regex = /(\w+\.\w+)$/i;    
var filename = regex.exec(test);    
于 2013-08-29T23:30:31.097 に答える
1

基本的に、正規表現で「OR」を使用するには、単純に「パイプ」区切り記号を使用します。

(aaa|bbb)

一致します

aaa

また

bbb

URLに一致する正規表現については、次のことをお勧めします。

\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*

これは、URL で許可されている文字セットに基づいています。

ファイルについて、ファイル名の定義は何ですか?

「(少なくとも)1つから多くの非フルストップ文字、その後にフルストップが続き、その後に(少なくとも)1つから複数の非フルストップ文字が続く」に一致する文字列を検索する場合は、次の正規表現をお勧めします:

[^\.]+\.[^\.]+

そして全体:

(\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*|[^\.]+\.[^\.]+)

これは(javascriptで)作業の例です:jsfiddle

ここで正規表現をオンラインでテストできます: http://gskinner.com/RegExr/

于 2013-08-29T22:24:09.770 に答える
0

これを試して:

var ajx = 'http://ajax.googleapis.com/html5shiv.js';
function isURL(str){
  return /((\/\w+)|(^\w+))\.\w{2,}$/.test(str);
}
console.log(isURL(ajx));
于 2013-08-29T22:34:56.467 に答える
0

プログラムはこちら!

<script>
var url="Home/this/example/file.js";
var condition=0;
var result="";
for(var i=url.length; i>0 && condition<2 ;i--)
{
    if(url[i]!="/" && url[i]!="."){result= (condition==1)? (url[i]+result):(result);}
    else{condition++;}
}
document.write(result);
</script>
于 2013-08-29T22:39:39.070 に答える
0

これを見てください(正規表現はまったく必要ありません):

var filename = string.indexOf('/') == -1
             ? string
             : string.split('/').slice(-1)[0];
于 2013-08-29T22:04:03.543 に答える
0

はい、代替演算子を使用できます|。ただし、優先度が非常に低いので注意してください。シーケンシングよりも低い。のようなものを書く必要があります/(cat)|(dog)/

ユースケースやテストケースが非常に少ないため、正確に何を望んでいるかを理解するのは非常に困難ですが、

(http://[a-zA-Z0-9\./]+)|([a-zA-Z0-9\.]+)

出発点を与える必要があります。

于 2013-08-29T22:05:50.723 に答える
0

If it's a URL, strip it down to the last part and treat it the same way as "just a filename".

function isFile(fileOrUrl) {
    // This will return everything after the last '/'; if there's
    // no forward slash in the string, the unmodified string is used
    var filename = fileOrUrl.split('/').pop();
    return (/.+\..+/).test(filename);
}
于 2013-08-29T22:09:58.690 に答える