替换文本中多个单词的有效方法

时间:2010-02-03 08:07:28

标签: javascript regex text performance

使用JavaScript我需要从~100000个单词文档中有效删除~10000个关键字,其中〜1000个是关键字。你会建议什么方法?

大量正则表达式是否可行? 或者我应该只是遍历文档字符寻找关键字(无聊)?

编辑:
好点 - 只有整个单词,而不是部分。有些关键字包含空格 我试图在客户端做到这一点,以减轻后端的压力。

3 个答案:

答案 0 :(得分:6)

使用正则表达式可能是个不错的选择:

var words = ['bon', 'mad'];
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), '');
// 'joe  joe  '

正则表达式 1 并不像前瞻那样复杂,而且regexp引擎是用C / C ++编写的,所以你可以期待它非常快。然而 - 基准并看看性能是否符合您的需求。

我不认为实现自己的解析器会更快,但我可能错了 - 基准。

将文档发送到服务器对我来说听起来不是很好。使用100k字时,您正在查看兆字节范围内的有效负载,您仍然需要在服务器上执行某些操作并将其推回。


1 您可能需要调整正则表达式以对空格执行某些操作。

答案 1 :(得分:0)

我的直觉告诉我,对于如此大量的关键字 - 对关键字进行排序并创建每个字符的状态机比正则表达式要快得多,因为状态机很简单,它可以自动生成。

答案 2 :(得分:0)

状态机似乎经常用于类似的任务,例如http://www.codeproject.com/KB/string/civstringset.aspx