Vraag Hoe te controleren of een string "StartSWith" een andere string is?


Hoe zou ik het equivalent van C # 's schrijven String.StartsWith in JavaScript?

var haystack = 'hello world';
var needle = 'he';

//haystack.startsWith(needle) == true

Opmerking: Dit is een oude vraag, en zoals opgemerkt in de commentaren introduceerde ECMAScript 2015 (ES6) de .startsWith methode. Op het moment van schrijven van deze update (2015) browserondersteuning is verre van compleet.


1547
2018-03-14 20:12


oorsprong


antwoorden:


U kunt ECMAScript 6's gebruiken String.prototype.startsWith() methode, maar het is nog niet ondersteund in alle browsers. U wilt een opvulsel / polyfill gebruiken om het toe te voegen aan browsers die dit niet ondersteunen. Een implementatie maken die voldoet aan alle details uiteengezet in de spec is een beetje gecompliceerd en de versie die in dit antwoord is gedefinieerd, zal niet werken; als je een trouwe shim wilt, gebruik dan:

Als u de methode eenmaal hebt opgevuld (of als u alleen browsers en JavaScript-engines ondersteunt die deze al hebben), kunt u deze op de volgende manier gebruiken:

"Hello World!".startsWith("He"); // true

var haystack = "Hello world";
var prefix = 'orl';
haystack.startsWith(prefix); // false

1655
2018-03-14 20:19



Een ander alternatief met .lastIndexOf:

haystack.lastIndexOf(needle, 0) === 0

Dit kijkt naar achteren haystack voor een voorkomen van needle beginnend met index 0 van haystack. Met andere woorden, het controleert alleen of haystack begint met needle.

In principe zou dit prestatievoordelen moeten hebben ten opzichte van een aantal andere benaderingen:

  • Het zoekt niet het hele haystack.
  • Er wordt geen nieuwe tijdelijke tekenreeks gemaakt en vervolgens wordt deze onmiddellijk verwijderd.

1226
2018-01-02 16:14



data.substring(0, input.length) === input

569
2018-03-14 20:14



Zonder een hulpfunctie, gewoon met behulp van regex's .test methode:

/^He/.test('Hello world')

Om dit te doen met een dynamische string in plaats van een hardcoded (ervan uitgaande dat de string geen regexp-controletekens bevat):

new RegExp('^' + needle).test(haystack)

Je moet uitchecken Is er een RegExp.escape-functie in Javascript? als de mogelijkheid bestaat dat tekens voor regexp-besturing in de tekenreeks worden weergegeven.


180
2018-01-04 00:59



Ik wilde hier gewoon mijn mening over toevoegen.

Ik denk dat we dit zo kunnen gebruiken:

var haystack = 'hello world';
var needle = 'he';

if (haystack.indexOf(needle) == 0) {
  // Code if string starts with this substring
}

50
2018-02-12 14:47



Beste oplossing:

function startsWith(str, word) {
    return str.lastIndexOf(word, 0) === 0;
}

startsWith("aaa", "a")
true
startsWith("aaa", "ab")
false
startsWith("abc", "abc")
true
startsWith("abc", "c")
false
startsWith("abc", "a")
true
startsWith("abc", "ba")
false
startsWith("abc", "ab")
true

En hier is het eindigt met als je dat ook nodig hebt:

function endsWith(str, word) {
    return str.indexOf(word, str.length - word.length) !== -1;
}

Voor degenen die er de voorkeur aan geven om het te prototypen in String: 

String.prototype.startsWith || (String.prototype.startsWith = function(word) {
    return this.lastIndexOf(word, 0) === 0;
});

String.prototype.endsWith   || (String.prototype.endsWith = function(word) {
    return this.indexOf(word, this.length - word.length) !== -1;
});

Gebruik: 

"abc".startsWith("ab")
true
"c".ensdWith("c") 
true

42
2018-04-26 21:56



Hier is een kleine verbetering van de oplossing van CMS:

if(!String.prototype.startsWith){
    String.prototype.startsWith = function (str) {
        return !this.indexOf(str);
    }
}

"Hello World!".startsWith("He"); // true

 var data = "Hello world";
 var input = 'He';
 data.startsWith(input); // true

Controleren of de functie al bestaat in het geval een toekomstige browser deze in native code implementeert of dat deze door een andere bibliotheek wordt geïmplementeerd. De Prototype Library implementeert deze functie bijvoorbeeld al.

Gebruik makend van ! is iets sneller en beknopter dan === 0 hoewel niet zo leesbaar.


37
2018-05-27 02:54



Bekijk ook eens underscore.string.js. Het wordt geleverd met een aantal handige methoden voor stringtesten en manipulatie, waaronder een startsWith methode. Van de documenten:

begint met  _.startsWith(string, starts)

Deze methode controleert of string begint met starts.

_("image.gif").startsWith("image")
=> true

21
2018-05-31 18:29