2010-03-25 16 views
9

Mam pole tekstowe, w którym użytkownik umieszcza ciąg tak:Utwórz odnośnik z JavaScript

"hello world! I think that __i__ am awesome (yes I am!)" 

muszę stworzyć prawidłowy adres URL tak:

hello-world-i-think-that-i-am-awesome-yes-i-am 

Jak można to zrobić używając wyrażeń regularnych?

Czy jest to również możliwe z greckim (na przykład)?

"Γεια σου κόσμε" 

zamienia się

geia-sou-kosme 

w innych językach programowania (Python/Ruby) Używam tablicę translacji. Czy powinienem zrobić to samo tutaj?

Odpowiedz

13

Spróbuj tego:

function doDashes(str) { 
    var re = /[^a-z0-9]+/gi; // global and case insensitive matching of non-char/non-numeric 
    var re2 = /^-*|-*$/g;  // get rid of any leading/trailing dashes 
    str = str.replace(re, '-'); // perform the 1st regexp 
    return str.replace(re2, '').toLowerCase(); // ..aaand the second + return lowercased result 
} 
console.log(doDashes("hello world! I think that __i__ am awesome (yes I am!)")); 
// => hello-world-I-think-that-i-am-awesome-yes-I-am 

chodzi o greckich bohaterów, tak nie mogę myśleć o niczym innym niż jakiejś tabeli przeglądowej używany przez inny regexp.

Edit, oto wersja oneliner:
Edit dodał toLowerCase():
Edytuj, kłopotliwy dylemat do regexp spływu:

function doDashes2(str) { 
    return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase(); 
} 
+0

Dzięki za realizację! – Pindatjuh

+0

Dodano tolowercasing i poprawkę do regexp, która obsługuje początkowe/końcowe śmieci, które mogą wystąpić. – npup

1

Prostym wyrażeniem regularnym do wykonania tego zadania jest dopasowanie wszystkich znaków "bez słów" i zastąpienie ich znakiem -. Ale zanim dopasujesz to wyrażenie, przekonwertuj ciąg znaków na małe litery. Samo to nie jest głupi dowód, ponieważ kres na końcu może być możliwe.

[^a-z]+ 

Po wymianie; można przyciąć kreski (z przodu i tyłu) za pomocą tego wyrażenia regularnego:

^-+|-+$ 

Trzeba by stworzyć grecki do tłumaczenia łacińskiego glyps siebie, regex nie może pomóc tam. Używanie tablicy tłumaczeń to dobry pomysł.

1

naprawdę nie mogę powiedzieć na greckich znaków, ale na pierwszy przykład prosta:

/[^a-zA-Z]+/ 

rade podczas używania go jako wzór, i zastępując mecze z " - "

Zgodnie ze znakami greckimi, sugeruję użycie tablicy z wszystkimi" tłumaczeniami znaków ", a następnie dodanie jej wartości do wyrażenia regularnego.

1

Aby z grubsza zbudować adres URL, potrzebujesz czegoś takiego.

var textbox = "hello world! I think that __i__ am awesome (yes I am!)"; 
var url = textbox.toLowerCase().replace(/([^a-z])/, '').replace(/\s+/, " ").replace(/\s/, '-'); 

To po prostu usuwa wszystkie znaki non-alfa, usuwa podwójne odstępy, a następnie zastępuje wszystkie znaki kosmiczne z myślnikiem.

Możesz użyć innego wyrażenia regularnego, aby zastąpić znaki greckie angielskimi znakami.

Powiązane problemy