Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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_Html_Regex_Search - Fatal编程技术网

Javascript 我需要按用户类型搜索文本,但它可能有数百或数千页,我如何才能有效地做到这一点

Javascript 我需要按用户类型搜索文本,但它可能有数百或数千页,我如何才能有效地做到这一点,javascript,html,regex,search,Javascript,Html,Regex,Search,我正在用javascript构建一个文本输入字段。但它更像一个文本编辑器,可能包含数百页长的巨大文档。我需要用户能够在本文中的任何地方进行更改,并突出显示符合特定正则表达式集的术语。目前,我所拥有的是: var regexes = { thing_A: /\>(.*?)(?:(?!(\s|$)).)*/, thing_B: /\#(.*?)(?:(?!(\s|$)).)*/, thing_C: /@(.*?)(?:(?!(\s|$)).)*/, whites

我正在用javascript构建一个文本输入字段。但它更像一个文本编辑器,可能包含数百页长的巨大文档。我需要用户能够在本文中的任何地方进行更改,并突出显示符合特定正则表达式集的术语。目前,我所拥有的是:

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一样快。