当然,我可以通过2个replace()
条目使其工作,但是我有办法聚合这两个替换吗?我需要从文本字符串中删除每个冒号和每个额外的空格(但不是单词之间的空格,只是空格)。
$(this).text().replace(':', '').replace(/\s+/g, " ");
答案 0 :(得分:2)
/\s*:|\s+(?=\s)/g
这个正则表达式怎么样,它是否符合你的需求?通过text.replace('/\s*:|\s+(?=\s)/g', '');
它查找:
可选地前面有空格后面的空格或空格。
请注意,要更改文本,您必须更改代码:
$(this).text(function(_,t) {return t.replace(/\s*:|\s+(?=\s)/g, "")});
显然我的正则表达式比原始正则复杂得多,它到目前为止不像双重替换那样可读但它仍然更快:http://jsperf.com/regorreplac(感谢@dystroy进行比较)。在源代码中使用正确的注释来解释正则表达式的作用,没有什么可以反对使用它。
答案 1 :(得分:1)
我想你必须问自己,更重要的是:可读性,或时间消耗?单个正则表达式会更快,但可读性更低(在我看来)。如果你在较小的字符串上使用它,我怀疑成本差异是否会显着,但是对于更大的字符串,并且时间是最重要的,也许值得考虑单个正则表达式。我仍然建议情况不太可能(假设这个确切的例子),所以一般我建议你坚持原始代码。
@ luk2302的单一正则表达式解决方案非常有效,所以如果必须选择单一解决方案,那么请继续使用。最初,我实际上认为一个更复杂的正则表达式加载需要更长的时间,而不是单个字符串替换,后跟一个简单的正则表达式。然而,这是基于一些被误导的概念,which has been debunked by @dystroy(感谢BTW,我想知道这是否线性扩展)。