【发布时间】:2013-08-22 12:57:33
【问题描述】:
我想替换所有非字母数字字符,并用下划线替换空格。到目前为止,我已经使用多个正则表达式提出了这个问题,但有没有更“有效”的方法?
"Well Done!".toLowerCase().replace(/\s/, '-').replace(/[^\w-]/gi, '');
干得好
【问题讨论】:
-
你不需要
toLowerCase(),你的意思是破折号-而不是下划线_? -
您可以使用函数作为第二个参数来决定任何给定匹配的替换内容:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。这将避免两次遍历字符串。这是否比许多短字符串的 JS 函数调用效率更高或更低是值得怀疑的。 (我的直觉告诉我“不”,但我不能胆大妄为地制作一个 jsperf。)
-
无论如何,您的代码有效,所以我不确定这是一个完全合适的问题。比如,什么会使答案“正确”?除了它是“不同的”,或者是第一个出现,或者你出于某种原因喜欢它。
-
@millimoose 似乎使用函数参数是一个不错的选择,我真正检查的是是否有一些更“智能”的正则表达式可以让我同时做这两个:)
-
@htmlr 这是一个不同的选项。我认为在您的情况下,可读性和性能都更差。你在做两件不同的事情,做两个不同的调用就足够有意义了。
标签: javascript regex