寻找一个正则表达式/替换函数来获取用户输入的字符串,比如“John Smith's Cool Page”,并返回一个文件名/url 安全字符串,如“john_smith_s_cool_page.html”,或类似的东西。
最佳答案
好吧,这是一个替换任何不是字母或数字的东西,并将其全部变成小写,就像你的例子一样。
var s = "John Smith's Cool Page";
var filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();
解释:
正则表达式是/[^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’之间的每个字母”。
关于javascript url 安全文件名安全字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485027/