使用JavaScript创建永久链接

时间:2010-03-25 22:16:32

标签: javascript regex permalinks

我有一个文本框,用户可以在其中放置如下字符串:

"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

在其他编程语言中(Python / Ruby)我正在使用翻译数组。我应该在这里做同样的事吗?

4 个答案:

答案 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/, '-');

它只删除所有非字母字符,删除双倍间距,然后用短划线替换所有空格字符。

您可以使用另一个正则表达式将英语字符替换为希腊字符。