寻找一个regex/replace函数来接受用户输入的字符串,比如“John Smith的酷页”,并返回一个文件名/url安全字符串,比如“john_smith_s_cool_page.html”,或者类似的东西。
pgccezyw1#
好吧,这里有一个替换任何不是字母或数字的东西,并使其全部小写,就像你的例子。
var s = "John Smith's Cool Page"; var filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();
说明:正则表达式是/[^a-z0-9]/gi,实际上,最后的gi只是一组选项,在使用表达式时使用。
/[^a-z0-9]/gi
gi
i
g
所以我们看到的实际上只是[^a-z0-9],让我们一步一步地读:
[^a-z0-9]
[
]
[one]
^
a-z0-9
abcdefghijklmnopqrstuvwxyz0123456789
基本上,正则表达式是这样说的:"查找不在'a'和'z'之间或'0'和'9'之间的每个字母"。
3htmauhk2#
我知道最初的海报要求一个简单的正则表达式,但是,有更多的涉及到清理文件名,包括文件名长度,保留文件名,当然还有保留字符。看看code in node-sanitize-filename,了解更强大的解决方案。
q3aa05253#
为了更灵活、更健壮地处理unicode字符等,可以将slugify与某些regex结合使用来删除unsafe URL characters
const urlSafeFilename = slugify(filename, { remove: /"<>#%\{\}\|\\\^~\[\]`;\?:@=&/g });
这会在你的url中产生很好的kebab-case文件名,并且允许a-z0-9范围之外的更多字符。
pod7payv4#
我认为你的要求是用_替换白色和省略号,并在末尾附加.html,试图找到这样的正则表达式。参考http://www.regular-expressions.info/javascriptexample.html
jk9hmnmh5#
我是这么做的,它可以把完整的句子转换成一个干净的网址。首先,它修剪字符串,然后将空格转换为破折号(-),最后,它去掉字母/数字/破折号以外的任何字符
function slugify(title) { return title .trim() .replace(/ +/g, '-') .toLowerCase() .replace(/[^a-z0-9-]/g, '') } slug.value = slugify(text.value); text.oninput = () => { slug.value = slugify(text.value); };
<input id="text" value="Foo: the old @Foobîdoo!! " style="font-size:1.2em"> <input id="slug" readonly style="font-size:1.2em">
5条答案
按热度按时间pgccezyw1#
好吧,这里有一个替换任何不是字母或数字的东西,并使其全部小写,就像你的例子。
说明:
正则表达式是
/[^a-z0-9]/gi
,实际上,最后的gi
只是一组选项,在使用表达式时使用。i
表示"忽略大小写差异"g
的意思是"全局",这确实意味着每个匹配都应该被替换,而不仅仅是第一个。所以我们看到的实际上只是
[^a-z0-9]
,让我们一步一步地读:[
和]
定义了一个"字符类",它是一个单字符的列表。如果你写[one]
,那么它将匹配"o"或"n"或"e"。^
,这意味着它应该只匹配列表中的字符**,而不是**。a-z0-9
。将其读作"a到z和0到9"。这是写abcdefghijklmnopqrstuvwxyz0123456789
的一种简短方式。基本上,正则表达式是这样说的:"查找不在'a'和'z'之间或'0'和'9'之间的每个字母"。
3htmauhk2#
我知道最初的海报要求一个简单的正则表达式,但是,有更多的涉及到清理文件名,包括文件名长度,保留文件名,当然还有保留字符。
看看code in node-sanitize-filename,了解更强大的解决方案。
q3aa05253#
为了更灵活、更健壮地处理unicode字符等,可以将slugify与某些regex结合使用来删除unsafe URL characters
这会在你的url中产生很好的kebab-case文件名,并且允许
a-z0-9
范围之外的更多字符。pod7payv4#
我认为你的要求是用_替换白色和省略号,并在末尾附加.html,试图找到这样的正则表达式。
参考
http://www.regular-expressions.info/javascriptexample.html
jk9hmnmh5#
我是这么做的,它可以把完整的句子转换成一个干净的网址。
首先,它修剪字符串,然后将空格转换为破折号(-),最后,它去掉字母/数字/破折号以外的任何字符