/ / Regex correspond au début de plusieurs mots dans la chaîne - javascript, regex

Correspondance regex pour le début de plusieurs mots dans la chaîne - javascript, regex

En Javascript, je veux pouvoir faire correspondre des chaînes qui commencent par une certaine phrase. Cependant, je veux qu'il puisse correspondre au début de n'importe quel mot de la phrase, pas seulement au début de la phrase.

Par exemple:

Phrase: "C'est le meilleur"

Besoin de correspondre: "th"

Résultat: correspond au Th et au Th

EDIT: b fonctionne très bien mais il propose un autre problème:

Il correspondra également aux caractères après les caractères étrangers. Par exemple, si ma chaîne est "Männ" et que je recherche "n", elle correspondra au n après Mä ... Des idées?

Réponses:

23 pour la réponse № 1
"This is the best moth".match(/bth/gi);

ou avec une variable pour votre chaîne

var string = "This is the best moth";
alert(string.match(/bth/gi));

b dans une regex est une limite de mot donc bth ne correspondra qu'à un th cela au début d'un mot.

gi est pour une correspondance globale (recherchez toutes les occurrences) et insensible à la casse

(J'ai jeté moth là-dedans pour rappel pour vérifier qu'il ne correspond pas)

exemple jsFiddle


Modifier:

Ainsi, ce qui précède ne renvoie que la partie que vous correspondez (th). Si vous souhaitez renvoyer les mots entiers, vous devez faire correspondre le mot entier.

C'est là que les choses se compliquent rapidement. D'abord sans lettre d'entité HTML:

string.match(/bth[^b]*?b/gi);

Exemple

Pour faire correspondre le mot entier, aller de la limite du mot b attrape le th suivi de limites sans mots [^b] jusqu'à ce que vous arriviez à une autre limite de mot b. le * signifie que vous voulez rechercher 0 ou plus des limites précédentes (sans limites de mots) ? mark signifie qu'il s'agit d'une correspondance paresseuse. En d'autres termes, il ne s'étend pas aussi grand que possible, mais s'arrête à la première occasion.

Si vous avez des caractères d'entité HTML comme ä (ä) les choses se compliquent très vite, et vous devez utiliser des espaces ou des espaces et un ensemble de caractères définis qui peuvent être aux limites des mots.

string.match(/sth[^s]*|^th[^s]*/gi);

Exemple avec des entités HTML.

Puisque nous n'utilisons pas de limites de mots, nous devons nous occuper du début de la chaîne séparément (|^).

Ce qui précède capturera l'espace blanc au début des mots. En utilisant b ne capturera pas les espaces blancs, car b n'a pas de largeur.


1 pour la réponse № 2

Utilisez ceci:

string.match(/^th|sth/gi);

Exemples:

"is this is a string".match(/^th|sth/gi);


"the string: This is a string".match(/^th|sth/gi);

Résultats:

["th", "Th"]

["th"]


1 pour la réponse № 3

Utilisez le g drapeau dans l'expression régulière. Il signifie «global», je pense, et il recherche tout correspond au lieu du seul premier.

Vous devriez aussi utiliser le i indicateur de correspondance insensible à la casse.

Vous ajoutez des indicateurs à la fin de l'expression régulière (/<regex>/<flags>) ou comme deuxième paramètre pour new RegExp(pattern, flags)

Par exemple:

var matches = "This is the best".match(/bth/gi);

ou en utilisant RegExp objets:

var re = new RegExp("\bth", "gi");
var matches = re.exec("This is the best");

MODIFIER: Utilisation b dans l'expression régulière pour correspondre au bla limite d'un mot. Notez qu'il ne correspond vraiment à aucun caractère spécifique, mais au début ou à la fin d'un mot ou de la chaîne.


1 pour la réponse № 4
var matches = "This is the best".match(/bth/ig);

résultats:

["Th", "th"]

L'expression régulière signifie: Match "th" en ignorant la casse et globalement (ce qui signifie, ne vous arrêtez pas à une seule correspondance) si "th" est le premier mot de la chaîne ou si "th" est précédé d'un espace.