2009-11-19 20 views
231

Eventuali duplicati:
Javascript StartsWithControlla se la stringa inizia con qualcosa?

So che posso fare come^= per vedere se un id inizia con qualcosa, e ho provato ad utilizzare che per questo, ma didn' t lavoro ... in sostanza, sto recuperando l'url e voglio impostare una classe per un elemento di percorsi che iniziano in un certo modo ...

Quindi,

var pathname = window.location.pathname; //gives me /sub/1/train/yonks/459087 

mi vuole fare in modo che per ogni percorso che inizia con/sub/1, è possibile impostare una classe per un elemento ...

if(pathname ^= '/sub/1') { //this didn't work... 
     ... 
+0

'/^\/sub \ /. * $/Gi.test (percorso)' restituirà un valore booleano come predicato. –

+1

Se vieni qui 6 anni dopo (come me stesso) il [post originale e duplicato di Javascript inizia con] (http://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith- un'altra stringa) fornisce una risposta molto accurata, utilizzando la funzione startWith() di Ecmascript 6, che sembra avere le migliori prestazioni. – theFreedomBanana

risposta

341

Usa stringObject.substring

if (pathname.substring(0, 6) == "/sub/1") { 
    // ... 
} 
+15

-1: crea una stringa aggiuntiva ridondante. – user1071136

+9

Ecco un caso di test per questo: http://jsperf.com/starts-with/2. Il metodo della sottostringa sembra essere il più veloce sulla mia macchina (con V8). – Pijusn

+19

Questo può essere reso più generico in questo modo: 'var x ="/sub/1 "; if (pathname.substring (0, x.length) === x) { // ... }; '. In questo modo non ti basterà più conoscere la lunghezza di 'x' come potrebbe cambiare. –

79

È possibile utilizzare string.match() e un'espressione regolare anche per questo:

if(pathname.match(/^\/sub\/1/)) { // you need to escape the slashes 

string.match() restituisce un array di sottostringhe corrispondenti se trovato, altrimenti nulla.

+22

+1 per non dover specificare la lunghezza della stringa di ricerca – Mercurybullet

+0

C'è qualche modo inserire dinamicamente una stringa di URL nell'expr? per esempio. sfuggire al/'s nella url? – Tjorriemorrie

+1

@Tjorriemorrie È possibile utilizzare la classe RegEx per eseguire questa operazione, ad esempio var reUrlTester = new RegEx (your_url_string); if (reUrlTester.test (url)) {// usa la funzione test per vedere se l'url corrisponde. – Cros

34

Un po 'più funzione riutilizzabile:

beginsWith = function(needle, haystack){ 
    return (haystack.substr(0, needle.length) == needle); 
} 
170
String.prototype.startsWith = function(needle) 
{ 
    return this.indexOf(needle) === 0; 
}; 
+9

-1 vedere i commenti qui per un motivo valido per non utilizzare questo tipo di implementazione: http: // stackoverflow.com/a/1978419/560287 –

+12

+1 indexOf è perfetto! Suggerisco solo di non aggiungere metodi agli oggetti che non possiedi. – collimarco

+1

Questa è la risposta perfetta (indexOf thing) di quella contrassegnata come risposta. –

22

In primo luogo, permette di estendere l'oggetto stringa. Grazie a Ricardo Peres per il prototipo, penso che l'uso della variabile "stringa" funzioni meglio di "ago" nel contesto di renderlo più leggibile.

String.prototype.beginsWith = function (string) { 
    return(this.indexOf(string) === 0); 
}; 

Quindi lo si utilizza in questo modo. Attenzione! Rende il codice estremamente leggibile.

var pathname = window.location.pathname; 
if (pathname.beginsWith('/sub/1')) { 
    // Do stuff here 
} 
+4

Non aggiungere davvero nulla. – ratbum

+0

IMHO ** indexOf ** ricerca l'intera stringa se non trova una corrispondenza immediata all'inizio: quindi la sua inefficienza aumenta per le stringhe molto lunghe da cercare. –

Problemi correlati