使用正则表达式将&符号(&)和空格转换为URL中的短划线( - )

时间:2016-07-19 13:40:01

标签: javascript regex

使用下面的代码,我已将以下名称转换为URL,例如

  • Love & Relationshipshttp://domain.org/love-relationships
  • Career & Guidancehttp://domain.org/career-guidance

    filter('ampToDash', function(){
        return function(text){
            return text ? String(text).replace(/ & /g,'-'): '';
        };
    }).filter('dashToAmp', function(){
        return function(text){
            return text ? String(text).replace(/-/g,' & '): '';
        };
    })
    

但是,我有一套新的名字,我无法弄清楚如何同时做两件事。

  • Being Humanhttp://domain.org/being-human
  • Competitive Examshttp://domain.org/competitive-exams

    filter('ampToDash', function(){
        return function(text){
            return text ? String(text).replace(/ /g,'-'): '';
        };
    }).filter('dashToAmp', function(){
        return function(text){
           return text ? String(text).replace(/-/g,' '): '';
        };
    })
    

如何将正则表达式代码组合在一起,以便它可以携手合作?

4 个答案:

答案 0 :(得分:3)

您可能还希望扩展替换条件,以涵盖所有"非单词"字符,而不是仅仅考虑你当前所知道的(&和空格)。这将是更具前瞻性的,也许更容易推理:

String(text).replace(/\W+/g, '-')

\W+表示任何非单词字符序列。)

示例:

'Jack & Jill went up the @$%#! hill'.replace(/\W+/g, '-')

收率:

Jack-Jill-went-up-the-hill

因为信息丢失(即你不知道究竟是什么导致了 - 通过查看转换后的字符串),你可以找到一种方法原始字符串只是存储它并通过转换后的字符串查找。详细说明:你可能会从这个新字符串中查找一些文档(" slug",正如其他人指出的那样)。将slug与文档一起存储,只需从数据库中查找文档(及其原始标题)。

答案 1 :(得分:1)

看起来您只想更改带有前导或尾随空格的仅与“&”符号的任何实例,或仅将白色空格更改为单个连字符。如果是这样,您可以使用以下表达式:

// Replace any strings that have leading and trailing spaces or just a series of spaces
String(text).replace(/(\s+&\s+|\s+)/g,'-'): '';

示例

enter image description here

var input = ['Love & Relationships', 'Career & Guidance', 'Being Human', 'Competitive Exams'];
for (var i in input) {
  var phrase = input[i];
  console.log(phrase + ' -> ' + phrase.replace(/(\s+&\s+|\s+)/g, '-'));
}

答案 2 :(得分:0)

我认为你正在寻找一个将字符串转换为slug的lib。 您可以手动执行此操作,但您可能很难覆盖其他边缘情况。

我建议你使用类似的东西: https://github.com/dodo/node-slug

如果你真的想要坚持正则表达方式,请查看这个要点:https://gist.github.com/mathewbyrne/1280286

答案 3 :(得分:0)

您有两个不同的问题:

  1. 如何' slugify'一个字符串
  2. 如何撤消/撤销slugify。
  3. 回答1:通用的slugify方法类似于:text.replace(/\W+/g, '-')

    回答2:你不能。你有一个函数(ampToDash)可以在给定不同输入的情况下产生相同的输出。即不再有dashToAmp的等价物。