Was ist der einfachste Weg, um herauszufinden, ob eine Zeichenfolge mit einem bestimmten Wert endet?
Was ist der einfachste Weg, um herauszufinden, ob eine Zeichenfolge mit einem bestimmten Wert endet?
Antworten:
Sie könnten Regexps wie folgt verwenden:
str.match(/value$/)
Dies würde true zurückgeben, wenn der String am Ende 'value' ($) hat.
Von Prototypen gestohlen:
String.prototype.endsWith = function(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
};
'slaughter'.endsWith('laughter');
// -> true
Ich hatte kein Glück mit dem Match-Ansatz, aber das hat funktioniert:
Wenn Sie die Zeichenfolge haben, "Dies ist meine Zeichenfolge." und wollte sehen, ob es mit einem Punkt endet, tun Sie dies:
var myString = "This is my string.";
var stringCheck = ".";
var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
alert(foundIt);
Sie können die Variable stringCheck so ändern, dass sie eine beliebige Zeichenfolge ist, nach der gesucht werden soll. Besser noch wäre es, dies in deine eigene Funktion wie folgt zu werfen:
function DoesStringEndWith(myString, stringCheck)
{
var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
return foundIt;
}
Das kannst du machen 'hello world'.slice(-5)==='world'. Funktioniert in allen Browsern. Viel schneller als Regex.
ES6 unterstützt dies direkt:
'this is dog'.endsWith('dog') //true
Ich erweitere nur das, was @ luca-matteis gepostet hat, aber um die in den Kommentaren genannten Probleme zu lösen, sollte der Code umbrochen werden, um sicherzustellen, dass Sie eine native Implementierung nicht überschreiben.
if ( !String.prototype.endsWith ) {
String.prototype.endsWith = function(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
};
}
Dies ist die vorgeschlagene Methode für die Methode Array.prototype.forEach, auf die im Mozilla-Entwicklernetzwerk hingewiesen wird
Sie können jederzeit einen Prototyp einer String-Klasse erstellen. Dies funktioniert:
String.prototype.endsWith = function (str) {return (this.match (str + "$") == str)}
Weitere verwandte Erweiterungen für die String-Klasse finden Sie unter http://www.tek-tips.com/faqs.cfm?fid=6620
matchein Array zurückgegeben wird. Es müsste sein this.match(str+"$")[0]===str(und das könnte scheitern, wenn matchnichts gefunden wird - habe diesen nicht falsch getestet).