Создайте постоянную ссылку с JavaScript

У меня есть текстовое поле, куда пользователь помещает строку как это:

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

Я должен создать корректный URL как это:

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

Как это может быть сделано с помощью регулярных выражений?

Кроме того, действительно ли возможно сделать это с греческим языком (например)?

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

повороты к

geia-sou-kosme

На других языках программирования (Python/Ruby) я использую массив перевода. Я должен сделать то же здесь?

9
задан Peter Mortensen 25 March 2010 в 22:23
поделиться

4 ответа

Попробуйте следующее:

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

Что касается греческих символов, да, я не могу придумать ничего, кроме какой-то таблицы поиска, используемой другим регулярным выражением.

Правка , вот единственная версия:
Правка , добавлено в нижний регистр ():
Правка , неприятное исправление в завершающем регулярном выражении:

function doDashes2(str) {
    return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase();
}
14
ответ дан 4 December 2019 в 12:17
поделиться

Чтобы примерно построить URL-адрес, вам понадобится что-то вроде этого.

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

Он просто удаляет все символы, отличные от альфа, удаляет двойной интервал, а затем заменяет все символы пробела тире.

Вы можете использовать другое регулярное выражение, чтобы заменить греческие символы английскими символами.

1
ответ дан 4 December 2019 в 12:17
поделиться

Простое регулярное выражение для выполнения этой работы сопоставляет все «несловесные» символы и заменяет их на - . Но перед сопоставлением этого регулярного выражения преобразуйте строку в нижний регистр. Само по себе это не является доказательством от дурака, поскольку возможен рывок в конце.

[^a-z]+

Таким образом, после замены; вы можете обрезать тире (спереди и сзади) с помощью этого регулярного выражения:

^-+|-+$

Вам придется самостоятельно создать перевод глипов с греческого на латинский, регулярное выражение здесь не поможет. Использование массива перевода - хорошая идея.

1
ответ дан 4 December 2019 в 12:17
поделиться

Я не могу точно сказать для греческих символов, но для первого примера простое:

/[^a-zA-Z]+/

Подойдет, если использовать его в качестве шаблона и заменить совпадения на "-" "

Что касается греческих символов, я бы предложил использовать массив со всеми« переводами символов », а затем добавить его значения в регулярное выражение.

1
ответ дан 4 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: