Javascript 清理 URL 正则表达式

Posted

技术标签:

【中文标题】Javascript 清理 URL 正则表达式【英文标题】:Javascript Clean URL Regex 【发布时间】:2010-11-27 07:11:33 【问题描述】:

我正在构建一个包含几个字段的 CMS 新闻部分,但这个问题特别需要的是“标题”和“URL 参考”字段。当用户输入文章标题时,我希望 javascript/jQuery 替换标题字段中的文本,并通过使用破折号 (-) 删除任何空格和奇怪字符来创建一个“干净”的 URL 片段。

例如

Kris 的有趣新文章(标题)

kris-fun-new-article(网址参考)

这是代码,但我似乎无法弄清楚如何替换多个空格和特殊字符

$('#title').keyup(function() var ref = $(this).val().toLowerCase().replace('\','-'); $('#reference').val(ref); );

此外,就像在标题“Kris' FUN new Article”中一样,正则表达式应该将“Kris'”(引号和空格)替换为“kris-”(一个破折号)。基本上识别是否有两个特殊字符并排并用一个破折号替换。不喜欢这种“kris--fun-new-article”。

提前致谢

【问题讨论】:

【参考方案1】:

Samir Talwar 的回答是正确的,只是在正则表达式的末尾需要一个标志 /.../g 来表示全局匹配。没有 /.../g 只会替换第一个匹配项。

Torez,这是你的函数的更新版本:

$('#title').keyup(function()
    var ref = $(this).val().toLowerCase().replace(/[^a-z0-9]+/g,'-');
    $('#reference').val(ref);
);

(抱歉,Samir,我本来只想评论你的回复,但我还没有足够的声望点。)

【讨论】:

如果您在标题的开头和/或结尾有不需要的字符,您最终会得到一个尾随或前导的“-”字符。使用额外的正则表达式文本替换行,如下所示:ref = ref.replace(/(^-|-$)/g,''); 任何前导或尾随 '-' 字符都将被删除,并使 URL 更清晰。【参考方案2】:

试试:

function slug(str) 
  if (!arguments.callee.re) 
    // store these around so we can reuse em.
    arguments.callee.re = [/[^a-z0-9]+/ig, /^-+|-+$/g];
    // the first RE matches any sequence of characters not a-z or 0-9, 1 or more 
    // characters, and gets replaced with a '-'  the other pattern matches '-'
    // at the beginning or end of a string and gets replaced with ''
  
  return str.toLowerCase()
   // replace all non alphanum (1 or more at a time) with '-' 
   .replace(arguments.callee.re[0], '-')
   // replace any starting or trailing dashes with ''
   .replace(arguments.callee.re[1],'');


slug("Kris' FUN new Article ");
// "kris-fun-new-article"

【讨论】:

【参考方案3】:

您需要正则表达式上的全局标志 - g - 以及某种用于倍数的量词(+ = 一个或多个匹配项,似乎就在这里)。

比如replace(/[' insert further chars you care about here]+/g,'-')

【讨论】:

【参考方案4】:

我认为您想要一个包含特殊字符和空格的字符类,然后您可以像这样指定一个或多个字符类实例:

[specials charaters " "]+

并用破折号替换匹配项

【讨论】:

【参考方案5】:

怎么样?

str = str.toLowerCase().replace(/[^a-z0-9]+/, '-');

应该用破折号替换不是字母或数字的所有内容,+ 表示一次需要多个字符。

【讨论】:

以上是关于Javascript 清理 URL 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 正则表达式替换 URL 的主机部分

javascript 正则表达式有效的URL

javascript 如何使用Javascript正则表达式获取URL参数

javascript正则表达式验证IP,URL

JavaScript 中正则表达式验证 URL 网址合法性,实用有效

URL 正则表达式在 javascript 中不起作用