【问题标题】:Problems with creating regex in JavaScript在 JavaScript 中创建正则表达式的问题
【发布时间】:2011-10-09 14:03:55
【问题描述】:

我正在研究满足我需求的正则表达式(实际上是正则表达式)。 :)

我需要替换给定的字符串(名为title)并返回slug

  1. 在有一个空格的地方用一个下划线替换一个空格。如果有多个空格,则只应替换一个空格。这很难解释,但我会尝试用例子来解释。 Hi and hello, world! 将是 Hi_and_hello,_world!,但如果在“世界”之前有两个空格,那么它将是 Hi_and_hello,_ world!

  2. 将所有剩余的空白替换为空 (''),

  3. 替换所有不需要的字符(白名单:a-zA-Z0-9 和下划线)。换句话说,如果符号不在白名单中,则应将其替换为空(''),

  4. 从下划线修剪开头和结尾;

最终结果应该是:

Hello, world! I'm known as daGrevis. :)

...到:

Hello_world_Im_known_as_daGrevis

我需要在 JavaScript 中做的所有事情。这是我到目前为止得到的:

slug = title.replace(/\s+/g, '_');
slug = title.replace(/\s+/g, '');
slug = title.replace(/[^\w0-9a-zA-Z]/g, '');

我不擅长正则表达式,所以不要嘲笑我。 :D 感谢您的建议!

【问题讨论】:

  • 我不明白第二条规则,剩下的空格是什么,你已经用第一条规则替换它们了吗?

标签: javascript regex replace


【解决方案1】:

换句话说:

  1. 用一个下划线替换所有连续的空格
  2. 删除所有不需要的字符
  3. 去掉开头和结尾的下划线

你去吧:

var slug = title.replace(/\s+/g, '_');
slug = slug.replace(/[^0-9a-z_]/gi, '');
slug = slug.replace(/^_+|_+$/g, "");
  • \s+ 匹配尽可能多的连续空格(空格、换行符、制表符、..)
  • /g 是一个全局标志,意思是:“选择每场比赛”
  • /[^a-z0-9_]/gi 表示:任何非字母数字字符或下划线,不区分大小写
  • ^$ 是字符串开头和结尾的标记。
    ^_+|_+$/g 表示:匹配字符串开头和结尾的每个下划线

不要忘记对slug 执行以下替换,而不是title。否则,你会“忘记”你之前的替代品。

【讨论】:

  • 感谢您的回答。无论如何,it doesn't work as expected。 :(
  • 最后一个可以替换为/[^\w]/,因为\wA-Za-z0-9_的缩写。
  • @ridgerunner 使用\W时,i标志也可以省略。
  • 关闭,但此解决方案错误地导致字符串连续出现多个下划线,例如:"Hello , , , world!"
  • @ridgerunner 为什么会出错?我严格遵守 OP 中定义的规则集。
【解决方案2】:

我会这样做:

slug = title.replace(/[^\s\w]+/g, '').replace(/\s+/g, '_').replace(/^_|_$/g, '');

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多