【发布时间】:2020-07-08 17:59:27
【问题描述】:
我有一个字符串,其中包含 html 内容。像这样的
const text = "My name is Alan and I <span>an</span> <div class="someClass">artist</div>."
我使用dangerouslySetInnerHTML 在反应组件中渲染它。这个文本真的很长,里面有不同类型的 HTML 标签。
我想搜索一个单词并在用户键入时在该文档中突出显示它。该功能类似于浏览器的查找 (cmd + f) 功能。当您键入时,文本应该会突出显示。
这就是我要找的:
user types `an`
const text = "My name is Alan and I <span>an</span> <div class="someClass">artist</div>."
result: "My name is Al<mark>an</mark> and I <span><mark>an</mark></span> <div class="someClass">artist</div>."
我尝试使用这个库https://github.com/bvaughn/react-highlight-words,但问题是它也会突出显示标签内的文本并弄乱内容。
result: "My name is Al<mark>an</mark> and I <sp<mark>an</mark>><mark>an</mark></span> <div class="someClass">artist</div>."
然后我会使用我自己的正则表达式并想出这个正则表达式:
const regex = new RegExp(((`${searchedText}`)(?![^<>]*>)))
但是 react(eslint) 在? 抛出这个错误:
This experimental syntax requires enabling the parser plugin: 'partial Application'
这是我的代码:
get highlightedText() {
if (searchText === '') return self.renderedText;
const regex = new RegExp((`${searchText}`)((?![^<>]*>)));
const parts = self.renderedText.split(regex);
return parts
.map(part => (regex.test(part) ? `<mark>${part}</mark>` : part))
.join('');
},
我不确定我做错了什么。当我使用 regextester.com 测试正则表达式时,正则表达式工作得很好
感谢任何帮助。谢谢!
【问题讨论】:
标签: javascript regex dom search highlight