In Javascript voglio essere in grado di abbinare le stringhe che iniziano con una determinata frase. Tuttavia, voglio che sia in grado di abbinare l'inizio di qualsiasi parola nella frase, non solo l'inizio della frase.
Per esempio:
Frase: "Questo è il migliore"
È necessario abbinare: "th"
Risultato: corrisponde a Th e th
EDIT: b funziona alla grande ma propone un altro problema:
Abbinerà anche i personaggi dopo quelli stranieri. Ad esempio, se la mia stringa è "Männ" e cerco "n", corrisponderà alla n dopo Mä ... Qualche idea?
risposte:
23 per risposta № 1"This is the best moth".match(/bth/gi);
o con una variabile per la tua stringa
var string = "This is the best moth";
alert(string.match(/bth/gi));
b
in una regex c'è una parola limite così bth
corrisponderà solo a th
quello all'inizio di una parola.
gi
è per una corrispondenza globale (cercare tutte le occorrenze) e senza distinzione tra maiuscole e minuscole
(Lanciai moth
come promemoria per verificare che non corrisponda)
Modificare:
Pertanto, quanto sopra restituisce solo la parte corrispondente (th
). Se vuoi restituire le parole intere, devi abbinare l'intera parola.
Questo è dove le cose si fanno difficili rapidamente. Innanzitutto senza lettera di entità HTML:
string.match(/bth[^b]*?b/gi);
Per abbinare l'intera parola vai dal confine della parola b
prendi il th
seguito da limiti non di parole [^b]
fino ad arrivare ad un altro limite di parole b
. Il *
significa che vuoi cercare 0 o più dei precedenti (senza limiti di parole) il ?
mark significa che questa è una partita pigra. In altre parole, non si espande nel modo più grande possibile, ma si ferma alla prima occasione.
Se hai caratteri entità HTML come ä (ä
) le cose si complicano molto velocemente e devi usare spazi bianchi o spazi bianchi e un insieme di caratteri definiti che possono essere ai confini delle parole.
string.match(/sth[^s]*|^th[^s]*/gi);
Poiché non stiamo usando i limiti di parola, dobbiamo occuparci dell'inizio della stringa separatamente (|^
).
Quanto sopra catturerà lo spazio bianco all'inizio delle parole. utilizzando b
da allora non catturerà spazi bianchi b
non ha larghezza.
1 per risposta № 2
Usa questo:
string.match(/^th|sth/gi);
Esempi:
"is this is a string".match(/^th|sth/gi);
"the string: This is a string".match(/^th|sth/gi);
risultati:
["th", "Th"]
[ "Th"]
1 per risposta № 3
Usa il g
bandiera nella regex. Sta per "globale", penso, e cerca tutti corrisponde invece solo al primo.
Dovresti usare anche il i
flag per la corrispondenza senza distinzione tra maiuscole e minuscole.
Aggiungi flag alla fine della regex (/<regex>/<flags>
) o come secondo parametro a new RegExp(pattern, flags)
Per esempio:
var matches = "This is the best".match(/bth/gi);
o, usando RegExp
oggetti:
var re = new RegExp("\bth", "gi");
var matches = re.exec("This is the best");
MODIFICARE:
Uso b
nella regex per abbinare il BOundary di una parola. Nota che non corrisponde realmente a nessun carattere specifico, ma all'inizio o alla fine di una parola o stringa.
1 per risposta № 4
var matches = "This is the best".match(/bth/ig);
ritorna:
["Th", "th"]
L'espressione regolare significa: Abbina "th" ignorando maiuscole e minuscole e globalmente (cioè, non fermarti a una sola corrispondenza) se "th" è la prima parola nella stringa o se "th" è preceduto da un carattere spazio.