我有一个文本框,用户可以在其中放置如下字符串:
"hello world! I think that __i__ am awesome (yes I am!)"
我需要像这样创建一个正确的网址:
hello-world-i-think-that-i-am-awesome-yes-i-am
如何使用正则表达式完成?
此外,是否可以使用希腊语(例如)?
"Γεια σου κόσμε"
转向
geia-sou-kosme
答案 0 :(得分:13)
试试这个:
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
至于希腊字符,是的,我想不出别的东西,而不是另一个正则表达式使用的某种查找表。
编辑,这是oneliner版本:
修改,添加到下载广告():
编辑,令人尴尬的修复了尾随的正则表达式:
function doDashes2(str) {
return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase();
}
答案 1 :(得分:1)
执行此作业的简单正则表达式是匹配所有“非单词”字符,并将其替换为-
。但在匹配此正则表达式之前,请将字符串转换为小写。仅凭这一点并不是万无一失的,因为最后可能会出现冲刺。
[^a-z]+
因此,更换后;您可以使用此正则表达式修剪破折号(从正面和背面):
^-+|-+$
你必须自己创建希腊语到拉丁语的glyps翻译,正则表达式无法帮助你。使用翻译数组是一个好主意。
答案 2 :(得分:1)
我不能说希腊语字符,但对于第一个例子,一个简单的:
/[^a-zA-Z]+/
使用它作为你的模式,然后用“ - ”替换匹配
时会做的伎俩根据希腊字符,我建议使用包含所有“字符翻译”的数组,然后将其值添加到正则表达式中。
答案 3 :(得分:1)
要大致构建网址,您需要这样的内容。
var textbox = "hello world! I think that __i__ am awesome (yes I am!)";
var url = textbox.toLowerCase().replace(/([^a-z])/, '').replace(/\s+/, " ").replace(/\s/, '-');
它只删除所有非字母字符,删除双倍间距,然后用短划线替换所有空格字符。
您可以使用另一个正则表达式将英语字符替换为希腊字符。