Regex Javascript - split string
Aux prises avec une regex exigence. J'ai besoin de découper une chaîne en un tableau où il trouve une barre oblique. Mais pas si la barre oblique est précédée par une évasion.
Par exemple, si j'ai cette chaîne:
hello/world
Je voudrais qu'il soit divisé en un tableau comme ceci:
arrayName[0] = hello
arrayName[1] = world
Et si j'ai cette chaîne:
hello/wo\/rld
Je voudrais qu'il soit divisé en un tableau comme ceci:
arrayName[0] = hello
arrayName[1] = wo/rld
Des idées?
source d'informationauteur WastedSpace
Vous devez vous connecter pour publier un commentaire.
La suite est un peu longue haleine mais les travaux, et évite le problème avec IE est cassé split mise en œuvre par la non-utilisation d'une expression régulière.
Je ne voudrais pas utiliser
split()
pour ce travail. Il est beaucoup plus facile de faire correspondre le chemin des composants eux-mêmes, plutôt que de les délimiteurs. Par exemple:de sortie:
l'essai à ideone.com
Voici une façon adaptée à partir de ces techniques dans ce blog:
Live exemple
Donné:
Le résultat est:
Qui utilise d'abord le simple "faux" lookbehind pour remplacer
/
avec[****]
et de remplacer\/
avec/
puis se divise sur la[****]
valeur. (Évidemment, remplacer[****]
avec quoi que ce soit qui ne seront pas dans la chaîne)./*
Si vous êtes l'obtention de votre chaîne à partir d'une requête ajax réponse ou une base de données de la requête,
qui est, la chaîne n'a pas été interprété par le javascript
vous pouvez faire correspondre les séquences de caractères qui soit n'ont pas de barre oblique ou ont échappé à des barres obliques.
Si vous êtes à la définition de la chaîne dans un script, d'échapper à la fuite et la bande après le match.
*/
Voici un exemple à rubular.com
De code court, vous pouvez utiliser l'inverse de simuler négatif lookbehind
mais pour être efficace, il est probablement préférable de se diviser sur les
/[/]/
et puis parcourir le tableau, et retrouver les éléments qui ont une évasion à la fin.Quelque chose comme cela peut prendre soin de cela pour vous.