/ / Corrispondenza Regex per l'inizio di più parole nella stringa - javascript, regex

Regex match per l'inizio di più parole in stringa - javascript, regex

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)

esempio jsFiddle


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);

Esempio

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);

Esempio con entità HTML.

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.