Javascript 我需要按用户类型搜索文本,但它可能有数百或数千页,我如何才能有效地做到这一点
我正在用javascript构建一个文本输入字段。但它更像一个文本编辑器,可能包含数百页长的巨大文档。我需要用户能够在本文中的任何地方进行更改,并突出显示符合特定正则表达式集的术语。目前,我所拥有的是:Javascript 我需要按用户类型搜索文本,但它可能有数百或数千页,我如何才能有效地做到这一点,javascript,html,regex,search,Javascript,Html,Regex,Search,我正在用javascript构建一个文本输入字段。但它更像一个文本编辑器,可能包含数百页长的巨大文档。我需要用户能够在本文中的任何地方进行更改,并突出显示符合特定正则表达式集的术语。目前,我所拥有的是: var regexes = { thing_A: /\>(.*?)(?:(?!(\s|$)).)*/, thing_B: /\#(.*?)(?:(?!(\s|$)).)*/, thing_C: /@(.*?)(?:(?!(\s|$)).)*/, whites
var regexes = {
thing_A: /\>(.*?)(?:(?!(\s|$)).)*/,
thing_B: /\#(.*?)(?:(?!(\s|$)).)*/,
thing_C: /@(.*?)(?:(?!(\s|$)).)*/,
whitespace: /\s+/,
other: /\S+/,
};
我有在键盘上运行的代码。它检查空格键“32”。当点击空格键时,它加入正则表达式并搜索文档。对于少量的文本来说,这很好,但对于大量文本来说,这将是相当繁重的。我可能只需要检查最后一段,但如果有人返回到文本的中间并更改了某些内容,我也需要跟踪这些内容
有更好的方法吗?你试过这个吗
var regexes = {
thing_X: /[>#@](.*?)(?:(?!(\s|$)).)*/,
whitespace: /\s+/,
other: /\S+/,
};
“”.indexOf()可以用作RegExp的门,因为它至少快50倍,有时比具有嵌套子句的复杂RegExp快500倍。首先使用indexOf尽可能多地删除RX,然后使用RX的强大功能得到具体的结果。假设有50个段落,我刚刚编辑了第34段,一旦我知道我在第34段,我就可以用\/n/n\和regex数组[33]分割整个文本,但是我如何找出我刚刚编辑的段落呢?另外,以这种方式拆分文本是否有效?indexOf会给我一个单词第一次出现的位置,但是可能会有很多出现,lastIndexOf可能会更好,但是如果我在第34段中添加的单词也在第40段中,那就没有帮助了。有什么想法吗?如果是文本区域,可以使用selectionStart确定刚刚编辑的段落。但是您谈到突出显示,它将指示一个div。在这种情况下,document.activeElement应该反映您的段落。是的,按“\n”拆分将比regexp的发布速度快得多,即使在整个文本上也是如此。粗略地假设一下,在一个段落中使用所有已发布的RX与在整体上使用indexOf一样快。