0

当然,我可以让它工作,有 2replace()个条目,但有没有办法让我聚合这两个替换?我需要从文本字符串中删除每个冒号和每个额外的空格(但不是单词之间的一个空格,只是空格)。

$(this).text().replace(':', '').replace(/\s+/g, " ");
4

2 回答 2

2

/\s*:|\s+(?=\s)/g这个正则表达式怎么样,它符合您的需求吗?通过使用text.replace('/\s*:|\s+(?=\s)/g', '');

它可选地查找:前面有空格或后面有空格的空格。

jsFiddle
Rubular

请注意,为了更改文本,您必须更改代码:

$(this).text(function(_,t) {return t.replace(/\s*:|\s+(?=\s)/g, "")});

#编辑

显然我的正则表达式比原来的要复杂得多,它的可读性远不如双重替换,但它仍然更快:http : //jsperf.com/regorreplac(感谢@dystroy 的比较)。在您的源代码中使用正确的注释来解释正则表达式的作用,没有什么可反对使用它的。

于 2013-07-24T23:26:24.723 回答
1

我想您必须问自己,什么更重要:可读性还是时间消耗?单个正则表达式会更快,但可读性要差得多(在我看来)。如果您在较小的字符串体上使用它,我怀疑成本差异是否会很大,但在较大的字符串上,时间是最重要的,也许值得考虑单个正则表达式。我仍然建议不太可能是这种情况(鉴于这个确切的例子),所以总的来说我建议你坚持使用你的原始代码。

@luk2302 的单一正则表达式解决方案完美运行,因此,如果您必须采用单一解决方案,那就去吧。最初,我实际上认为加载单个更复杂的正则表达式比加载单个字符串替换后跟一个简单的正则表达式需要更长的时间。然而,这是基于一些被误导的概念,@dystroy 已经揭穿了这一点(谢谢顺便说一句,我想知道这是否是线性扩展的)。

于 2013-07-24T23:08:48.453 回答