Domanda

Ho una casella di testo in cui un utente pone una stringa come questa:

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

Ho bisogno di creare un URL corretto in questo modo:

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

Come può essere fatto utilizzando le espressioni regolari?

Inoltre, è possibile farlo con greca (per esempio)?

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

si rivolge a

geia-sou-kosme

In altri linguaggi di programmazione ( Python / rubino ) sto usando un array di traduzione. Dovrei fare lo stesso qui?

È stato utile?

Soluzione

Prova questo:

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

Per quanto riguarda i caratteri greci, sì Non posso pensare a niente altro che una sorta di tabella di ricerca utilizzato da un altro regexp.

Modifica , ecco la versione oneliner:
Modifica , ha aggiunto toLowerCase ():
Modifica , correzione imbarazzante per la regexp finale:

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

Altri suggerimenti

Una semplice espressione regolare per fare questo lavoro è la corrispondenza di tutti i caratteri "non-parola", e sostituirli con un -. Ma prima di questo corrispondenti regex, convertire la stringa in minuscolo. Questo da solo non è infallibile, dal momento che un trattino alla fine può essere possibile.

[^a-z]+

In questo modo, dopo la sostituzione; è possibile tagliare i trattini (dalla parte anteriore e posteriore) usando questo regex:

^-+|-+$

Dovreste creare greco-to-latin glyps traduzione voi stessi, espressione regolare non si può fare lì. Utilizzando una matrice di traduzione è una buona idea.

Non posso davvero dire per greco personaggi, ma per il primo esempio, un semplice:

/[^a-zA-Z]+/

farà il trucco quando lo si utilizza come modello, e sostituendo le partite con un "-"

Come per i caratteri greci, suggerirei usando un array con tutte le "traduzioni di carattere", e quindi aggiungendo suoi valori per l'espressione regolare.

Per circa costruire l'url si avrebbe bisogno di qualcosa di simile.

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

Si rimuove semplicemente tutti i caratteri non alfa, rimuove spaziatura doppia, e poi sostituisce tutti i caratteri spazio con un trattino.

Si potrebbe utilizzare un'altra espressione regolare per sostituire i caratteri greci con caratteri inglesi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top