2009-07-07 6 views

答えて

149

あなたはこのように、正規表現を使用することができます。

文字列はそれの終わり($)で '値' を持っている場合はtrueを返します
str.match(/value$/) 

+1

テスト失敗:value = "test [a-z]"それ以外の場合は、 'test [az]'一致(/ [az] $ /)は "null"を返す – gmunkhbaatarmn

+0

通常は私のバッグから正規表現ツールを取得しませんが、これはすべての選択肢に勝ちます(String#endsWith is firefoxでのみネイティブにサポートされています。サードパーティ製のjsを拡張/使用するのはちょっと残念です) – diclophis

+1

match()はブール値を返しません。 'foobar'.match(/ bar $ /)は["bar"]を返す –

37

盗まれた:

String.prototype.endsWith = function(pattern) { 
    var d = this.length - pattern.length; 
    return d >= 0 && this.lastIndexOf(pattern) === d; 
}; 

'slaughter'.endsWith('laughter'); 
// -> true 
+5

コアクラスのプロトタイプを変更することは、 Crockfordは、彼の著書「JavaScript:The Good Parts」の中で、これを「グローバルな軽減」と呼んでいます。 –

+4

なぜあなたはそれをしてはいけないのですか?それともCrockfordが言ったので、あなたはそれをしないのですか? –

+9

JSのすべての実装で動作することが保証されていないため、ECMAScript Compact Profile仕様(ECMA-327:http://www.ecma-international.org/publications/standards/Ecma-327 .htm)は、 "コンパクト"な実装(例えば、携帯電話などのハンドヘルドデバイス上)でサポートする必要がないことを指定します(5.2節を参照)。たとえあなたがそれに煩わされていないとしても、新しいバージョンのJSを破る可能性はかなり高いです。たとえば、以前に配備されたコードでArray.prototypeに "forEach"メソッドを追加した人は、最近のバージョンのFirefoxでは – NickFitz

9

正規表現

"Hello world".match(/world$/) 
0

あなたは常にStringクラスのプロトタイプを作成することができ、これは動作します:

String.prototype.endsWith =機能(文字列) {リターン(this.match(STR + "$"あなたは私は何に拡大していますhttp://www.tek-tips.com/faqs.cfm?fid=6620

+2

これは次の場合に失敗します。 strには特別な正規表現文字が含まれています(例: "[ssss]")。 – studgeek

1

にStringクラスのための他の関連の拡張機能を見つけることができます

)== strの)} @ luca-matteisは投稿しましたが、コメントに指摘されている問題を解決するために、ネイティブ実装を上書きしないようにコードをラップする必要があります。

if (!String.prototype.endsWith) { 
    String.prototype.endsWith = function(pattern) { 
     var d = this.length - pattern.length; 
     return d >= 0 && this.lastIndexOf(pattern) === d; 
    }; 
} 

このArray.prototype.forEach方法について提案された方法は、the mozilla developer network

4

で指摘された私は、試合のアプローチとは運がなかったが、これは働いていた:

あなたは文字列を持っている場合、 "これは私の弦です。"

var myString = "This is my string."; 
var stringCheck = "."; 
var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0; 
alert(foundIt); 

変数stringCheckを確認する文字列に変更することができます。まだよく、このように自分自身の機能でこれをスローするようになります:

function DoesStringEndWith(myString, stringCheck) 
{ 
    var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0; 
    return foundIt; 
} 
+1

本当に素敵な、@ theJerm。これは、さまざまな状況で私のために働いたのに対し、.matchは必ずしもそうではありませんでした。 – Nathan

1

ES6は、これを直接サポートしています。

'this is dog'.endsWith('dog') //true 
+0

IE11以降を使用している人がいなくなった場合に便利です。 – AntonChanning

+0

うん、しかし、それはあなたのためにベルベルを持っています。 –

1

あなたは'hello world'.slice(-5)==='world'を行うことができます。すべてのブラウザで動作します。正規表現よりもはるかに高速です。

関連する問題