我有一个文本框,用户在其中放置这样的字符串:
"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
我有一个文本框,用户在其中放置这样的字符串:
"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
尝试这个:
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
至于希腊字符,是的,除了另一个正则表达式使用的某种查找表之外,我想不出其他任何东西。
Edit,这里是 oneliner 版本:
Edit,添加到LowerCase():
Edit,对尾部正则表达式进行了令人尴尬的修复:
function doDashes2(str) {
return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase();
}
完成这项工作的一个简单正则表达式是匹配所有“非单词”字符,并将它们替换为-
. 但在匹配此正则表达式之前,将字符串转换为小写。仅此一项并不是万无一失的,因为最后可能会出现破折号。
[^a-z]+
因此,更换后;您可以使用此正则表达式修剪破折号(从前面和后面):
^-+|-+$
您必须自己创建希腊语到拉丁语的 glyps 翻译,正则表达式无法帮助您。使用翻译数组是个好主意。
我真的不能说希腊字符,但对于第一个例子,一个简单的:
/[^a-zA-Z]+/
将其用作您的模式时会起作用,并用“-”替换匹配项
根据希腊字符,我建议使用包含所有“字符翻译”的数组,然后将其值添加到正则表达式中。
要粗略地构建 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/, '-');
它只是删除所有非字母字符,删除双倍间距,然后用破折号替换所有空格字符。
您可以使用另一个正则表达式将希腊字符替换为英文字符。