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;
}
答
问题在于你避开功能:
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"), '-');
注意,使用这种格式时,你不需要指定定界字符(向前前后斜杠),并且该标志作为第二个参数传递给构造函数。我还在前面添加了一个反斜杠来转义您可能要替换的特殊字符。
答
不能在正则表达式文字使用的变量名这样的,(/炭/)。可以使用具有正确转义值的RegExp对象,或者制作一个匹配所有要替换的字符的正则表达式字面值。
答
我的作品是这样一个版本:
function urlTitle(text) {
var removeRe = /[^\w\s]/ig,
spacesRe = /[\s]/ig;
return text.toLowerCase().replace(removeChars, '').replace(spaceChars, '-');
}
这有一个弱点双空格都变成了双“-'s。这可以改进与另一个正则表达式。
搜索引擎是否执行客户端代码? – Amberlamps 2012-03-19 15:39:28
我正在创建一个工具,以便我们的经销商可以使用我们的CMS创建链接到他们的文章链接。该链接不会被客户端执行 – sehummel 2012-03-19 15:41:03