J'ai une chaîne:
var string = "aaaaaa<br />† bbbb<br />‡ cccc"
Et je voudrais diviser cette chaîne avec le délimiteur <br />
suivi d'un caractère spécial.
Pour ce faire, j'utilise ceci:
string.split(/<br \/>&#?[a-zA-Z0-9]+;/g);
J'obtiens ce dont j'ai besoin, sauf que je perds le délimiteur. Voici l'exemple: http://jsfiddle.net/JwrZ6/1/
Comment puis-je conserver le délimiteur?
javascript
regex
Miloš
la source
la source
var delim = "<br/>";
?Réponses:
Utilisez la recherche anticipée (positive) pour que l'expression régulière affirme que le caractère spécial existe, mais ne lui correspond pas réellement:
Voyez-le en action:
la source
0
à la fin de chaque chaîneJ'avais un problème similaire mais légèrement différent. Quoi qu'il en soit, voici des exemples de trois scénarios différents pour savoir où conserver le déliminateur.
Attention: le quatrième ne fonctionnera que pour diviser des caractères uniques. ConnorsFan présente une alternative :
la source
g
fin.match
solution non gourmande pour ces exemples:"11、22、33".match(/.*?、|.+$/g)
->["11、", "22、", "33"]
. Le/g
modificateur de note est crucial pour le match.Si vous entourez le délimiteur de parantheses, il fera partie du tableau renvoyé.
En fonction de la pièce que vous souhaitez conserver, changez le sous-groupe auquel vous correspondez
Vous pouvez améliorer l'expression en ignorant la casse des lettres string.split (/ () & #? [A-z0-9] +; / gi);
Et vous pouvez faire correspondre des groupes prédéfinis comme celui-ci:
\d
égal[0-9]
et\w
égal[a-zA-Z0-9_]
. Cela signifie que votre expression pourrait ressembler à ceci.Il existe une bonne référence d'expression régulière sur JavaScriptKit .
la source
répondu ici aussi JavaScript Split Regular Expression garder le délimiteur
utiliser le modèle lookahead (? = pattern) dans l'exemple regex
cela vous donnera le résultat suivant.
Peut également être directement divisé
donnant le même résultat
la source
J'ai apporté une modification à la réponse de jichi et l'ai mise dans une fonction qui prend également en charge plusieurs lettres.
La 3ème méthode des réponses de jichi ne fonctionnait pas dans cette fonction, j'ai donc pris la 4ème méthode et supprimé les espaces vides pour obtenir le même résultat.
edit: deuxième méthode qui exclut un tableau pour séparer char1 ou char2
usage:
la source
Une fonction d'extension divise la chaîne avec une sous-chaîne ou RegEx et le délimiteur est placé en fonction du deuxième paramètre en avant ou en arrière.
Le test:
la source
J'utilise ceci:
Sauf que vous ne devriez pas jouer avec
String.prototype
, alors voici une version de fonction:Vous pouvez donc faire:
Et vous vous retrouverez avec:
la source