Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中创建正则表达式的问题_Javascript_Regex_Replace - Fatal编程技术网

在JavaScript中创建正则表达式的问题

在JavaScript中创建正则表达式的问题,javascript,regex,replace,Javascript,Regex,Replace,我正在开发能够满足我需求的正则表达式(实际上是正则表达式) 我需要替换给定的字符串(名为title)并返回slug: 在有一个空格的地方用一个下划线替换一个空格。如果存在多个空白,则只应替换一个空白。这很难解释,但我会尝试用例子来解释你好,世界将是你好,你好,世界,但如果在“world”之前有两个空格,那么它将是Hi\u和\u hello,\uworld, 将所有剩余的空格全部替换为零(') 替换所有不需要的字符(白名单:a-z,a-z,0-9和下划线)。换句话说,如果符号不在白名单中,则应将其

我正在开发能够满足我需求的正则表达式(实际上是正则表达式)

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

  • 在有一个空格的地方用一个下划线替换一个空格。如果存在多个空白,则只应替换一个空白。这很难解释,但我会尝试用例子来解释<代码>你好,世界将是
    你好,你好,世界,但如果在“world”之前有两个空格,那么它将是
    Hi\u和\u hello,\uworld,

  • 将所有剩余的空格全部替换为零(
    '

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

  • 从下划线修剪开始和结束

  • 最终结果应该是:

    你好,世界!我叫达格利维斯。:)

    …致:

    Hello\u world\u Im\u称为\u daGrevis

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

    slug = title.replace(/\s+/g, '_');
    slug = title.replace(/\s+/g, '');
    slug = title.replace(/[^\w0-9a-zA-Z]/g, '');
    
    我对regexies不太在行,所以不要嘲笑我D谢谢你的建议

    换句话说:

  • 将所有连续空格替换为一个下划线
  • 删除所有不需要的字符
  • 删除开头和结尾的下划线
  • 好了:

    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
    。否则,您将“忘记”以前的替代品。

    换句话说:

  • 将所有连续空格替换为一个下划线
  • 删除所有不需要的字符
  • 删除开头和结尾的下划线
  • 好了:

    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
    。否则,您将“忘记”以前的替代品。

    我会这样做:

    slug=title.replace(/[^\s\w]+/g',).replace(/\s+/g',''.').replace(/^||$/g',);
    
    以下是我的做法:

    slug=title.replace(/[^\s\w]+/g',).replace(/\s+/g',''.').replace(/^||$/g',);
    
    谢谢您的回答。无论如何(最后一个可以替换为
    /[^\w]/
    ,因为
    \w
    A-Za-z0-9.
    @ridgerunner的缩写。当使用
    \w
    时,
    i
    标志也可以省略。关闭,但此解决方案会错误地导致字符串在一行中出现多个下划线,例如:
    “你好,世界!”
    @ridgerunner为什么会出错?我严格遵守了OP中定义的规则集。谢谢你的回答。无论如何,:(最后一个可以替换为
    /[^\w]/
    由于
    \w
    A-Za-z0-9
    @ridgerunner的缩写,当使用
    \w
    时,
    i
    标志也可以省略。关闭,但此解决方案会错误地导致字符串在一行中出现多个下划线,例如:
    “你好,世界!”
    @ridgerunner为什么会出错?我严格遵守了OP中定义的规则集。我不理解第二条规则,剩余的空格是什么,您已经用第一条规则替换了它们?我不理解第二条规则,剩余的空格是什么,您已经用第一条规则替换了它们?