2017-09-06 1 views
2

Je veux diviser une chaîne à / mais pas à // ou ///.
Ce que j'ai essayé:
Regex sélectionner un/mais pas multiple dans js

  1. /[^\/]\/[^\/]/g mais je ne veux pas les personnages avant et après le / à sélectionner.
  2. /\b\/\b/g ne fonctionne pas car \b ne compte que pour \w.
  3. /(?<!\/)\/(?!\/)/g mais lookbehind n'est pas supporté en javascript.

Je n'arrive pas à trouver un moyen d'atteindre mon objectif. Quelqu'un at-il une solution à ce problème ou est-ce simplement impossible en javascript?

Répondre

2

Vous pouvez utiliser

.match(/(?:\/{2,}|[^\/])+/g) 

Voir la regex demo

Le motif (?:\/{2,}|[^\/])+ correspond à un ou plusieurs (+) occurrences de 2 ou plusieurs caractères / ou tout autre omble chevalier, mais /. Cela signifie qu'il correspond à n'importe quel char (s) jusqu'à un /.

var rx = /(?:\/{2,}|[^\/])+/g; 
 
var s = "a/b//c///d////r"; 
 
console.log(s.match(rx));

+0

Bon, maintenant il y a tout sélectionné, mais un seul /. Mais je veux vraiment les sélectionner. Est-il possible de simplement nier toute l'expression? –

+1

@ S.Babovic Vous ne pouvez pas utiliser une méthode 'split()'. Utilisez '.match()' comme je l'ai montré. Ok, dans Chrome, il existe un moyen d'utiliser un lookbehind (avec une option spéciale activée), mais il s'agit toujours d'une construction non standard pour une expression rationnelle JS. –