jQuery/JS:如何创建一个搜索引擎友好的链接

问题描述:

我想创建一个从文本输入框中的输入搜索引擎友好的链接。当光标离开输入时,我会在blur事件中这样做。我可以让输入中的文本出现在所需的输入中(对于链接),但我的链接不是连字符,而且特殊字符也不能用连字符替换。我正在尝试执行全局字符串替换,但表达式需要一个字符串,而不是一个变量。至少从我所知道的。此外,我找不到一个更好的方法来匹配特殊字符的列表,而不是数组和循环。有人可以帮忙吗?我的愿望是创建这样的链接:http://domain.com/this-is-my-link。这里是我的代码:jQuery/JS:如何创建一个搜索引擎友好的链接

$('#title').blur(function() { 
     var hyphenated; 
     hyphenated = urlTitle($(this).val());    
     $('#link').val(hyphenated);  
}); 


function urlTitle(text) {  
    var characters = [' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '=', '_', '{', '}', '[', ']', '|', '/', '<', '>', ',', '.', '?', '--']; 

    for (var i = 0; i < characters.length; i++) { 
     var char = String(characters[i]); 
     text = text.replace(/char/g, '-'); 

}   
    text = text.toLowerCase(); 
    return text; 
} 
+0

搜索引擎是否执行客户端代码? – Amberlamps 2012-03-19 15:39:28

+0

我正在创建一个工具,以便我们的经销商可以使用我们的CMS创建链接到他们的文章链接。该链接不会被客户端执行 – sehummel 2012-03-19 15:41:03

问题在于你避开功能:

text = text.replace(/char/g, '-'); 

字面上符合 “焦炭”。所以如果你给它I'm building a string out of chars,it will returni'm building a string out of -s

如果要使用变量动态构建正则表达式,则需要使用字符串和RegExp constructor构建它。

text = text.replace(new RegExp("\\" + char, "g"), '-'); 

注意,使用这种格式时,你不需要指定定界字符(向前前后斜杠),并且该标志作为第二个参数传递给构造函数。我还在前面添加了一个反斜杠来转义您可能要替换的特殊字符。

Live example

+0

完美。谢谢,Xeon06。 – sehummel 2012-03-19 15:51:49

+0

我将如何删除任何尾随连字符? – sehummel 2012-03-19 15:55:54

+0

@ shummel7845你可以使用[这些修剪功能](http://www.webtoolkit.info/javascript-trim.html)。 [现场示例](http://jsfiddle.net/pNcVc/2/) – 2012-03-19 17:42:22

不能在正则表达式文字使用的变量名这样的,(/炭/)。可以使用具有正确转义值的RegExp对象,或者制作一个匹配所有要替换的字符的正则表达式字面值。

我的作品是这样一个版本:

function urlTitle(text) { 
    var removeRe = /[^\w\s]/ig, 
     spacesRe = /[\s]/ig; 
    return text.toLowerCase().replace(removeChars, '').replace(spaceChars, '-'); 
} 

这有一个弱点双空格都变成了双“-'s。这可以改进与另一个正则表达式。