2010-06-07 5 views
5

J'ai tout en place pour créer des limaces à partir des titres, mais il y a un problème. Mon RegEx remplace les espaces par des traits d'union. Mais quand un utilisateur tape "Salut    " (plusieurs espaces), le slug se termine par "Hi ----- there". Quand vraiment ça devrait être "Hi-there".Création de limaces à partir de titres?

Est-ce que je devrais créer l'expression régulière de sorte qu'elle remplace seulement un espace quand il y a un caractère de chaque côté?

Ou y a-t-il une manière plus facile de faire ceci?

+0

Le problème est que les titres sont créés à la volée, en utilisant Javascript, pour montrer à l'utilisateur à quoi ressemblera son URL. C'est pour un réseau social. –

+1

JavaScript est un langage de programmation, et il peut faire regex. Quel est le problème? –

Répondre

2

Il est peut-être le plus facile à plier répétées - s dans un - comme la dernière étape:

replace /-{2,}/ by "-" 

Ou si vous ne souhaitez que cela affecte les espaces, plier des espaces à la place (avant les autres étapes, évidemment) Il suffit de faire correspondre plusieurs caractères d'espacement.

+0

+1: Cela, ou pliez les espaces comme première étape. –

5

s/\s+/-/g 
0

Je remplacerais [\s]+ avec '-' et puis remplacer [^\w-] avec ''

+0

Cela a fonctionné parfaitement !! –

+0

Vous pouvez ajouter un '[-] +' '' '' '' '' 'à la fin pour remplacer plusieurs -s – Oli

6

J'utilise ceci:

yourslug.replace(/\W+/g, '-') 

Cela remplace toutes les occurrences d'un ou plusieurs caractères non alphanumériques avec seul tiret.

0

Vous souhaiterez peut-être découper la chaîne en premier, afin d'éviter les traits d'union avant et arrière.

function hyphenSpace(s){ 
    s= (s.trim)? s.trim(): s.replace(/^\s+|\s+$/g,''); 
    return s.split(/\s+/).join('-'); 
} 
Questions connexes