在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中定义的规则集。我不理解第二条规则,剩余的空格是什么,您已经用第一条规则替换了它们?我不理解第二条规则,剩余的空格是什么,您已经用第一条规则替换了它们?