Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文本中多词替换的有效方法_Javascript_Regex_Text_Performance - Fatal编程技术网

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

Javascript 文本中多词替换的有效方法,javascript,regex,text,performance,Javascript,Regex,Text,Performance,使用JavaScript,我需要从一个100000字的文档中高效地删除10000个关键字,其中1000个是关键字。你有什么建议 大规模正则表达式实用吗? 或者我应该只是在文档字符中迭代寻找关键字(无聊) 编辑: 很好的观点-只有整句话,而不是部分。有些关键字包含空格。 我正在尝试在客户端完成这一切,以减轻后端的压力。使用正则表达式可能是一个不错的选择: var words = ['bon', 'mad']; 'joe bon joe mad'.replace(new RegExp('(' + w

使用JavaScript,我需要从一个100000字的文档中高效地删除10000个关键字,其中1000个是关键字。你有什么建议

大规模正则表达式实用吗? 或者我应该只是在文档字符中迭代寻找关键字(无聊)

编辑:
很好的观点-只有整句话,而不是部分。有些关键字包含空格。

我正在尝试在客户端完成这一切,以减轻后端的压力。

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

var words = ['bon', 'mad'];
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), '');
// 'joe  joe  '
regex1并不是很复杂,比如look-ahead,regexp引擎是用C/C++编写的,所以您可以预期它会非常快。尽管如此,还是要进行基准测试,看看性能是否符合您的需要

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

将文档发送到服务器对我来说不是很好。有了10万个字,您将看到兆字节范围内的有效负载,您仍然需要在服务器上对其进行处理并将其推回



1您可能需要调整regexp来处理空格。

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

状态机似乎经常用于类似的任务,例如,有趣的问题。一方面,用编译过的语言手写的状态机可以打败regex,但另一方面,Javascript本身速度相当慢,因此您需要尝试测试regex引擎是否因为编译而更快。它必须是Javascript还是可以推送到服务器进行转换?如果没有一些数据来测试,很难说哪一个更有效。例如,如果您使用的是Python,如果确实需要,您可以对数据进行分段并执行线程处理。是否只需要替换整个单词或部分单词——例如,word、keyword、word stem都包含单词“word”,必须如何处理它们?您可能需要添加单词边框检查
'\\b('+words.join('|')+)\\我同意,regexp可能需要一些爱,但它说明了这一点。