У меня есть текстовое поле, куда пользователь помещает строку как это:
"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) я использую массив перевода. Я должен сделать то же здесь?
Попробуйте следующее:
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();
}
Чтобы примерно построить 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/, '-');
Он просто удаляет все символы, отличные от альфа, удаляет двойной интервал, а затем заменяет все символы пробела тире.
Вы можете использовать другое регулярное выражение, чтобы заменить греческие символы английскими символами.
Простое регулярное выражение для выполнения этой работы сопоставляет все «несловесные» символы и заменяет их на -
. Но перед сопоставлением этого регулярного выражения преобразуйте строку в нижний регистр. Само по себе это не является доказательством от дурака, поскольку возможен рывок в конце.
[^a-z]+
Таким образом, после замены; вы можете обрезать тире (спереди и сзади) с помощью этого регулярного выражения:
^-+|-+$
Вам придется самостоятельно создать перевод глипов с греческого на латинский, регулярное выражение здесь не поможет. Использование массива перевода - хорошая идея.
Я не могу точно сказать для греческих символов, но для первого примера простое:
/[^a-zA-Z]+/
Подойдет, если использовать его в качестве шаблона и заменить совпадения на "-" "
Что касается греческих символов, я бы предложил использовать массив со всеми« переводами символов », а затем добавить его значения в регулярное выражение.