【发布时间】:2021-07-09 05:36:10
【问题描述】:
我有来自 post 的这段代码,它改变了除 html 标记之外的字符串的值。
const regEx = new RegExp("(" + searchWord + ")(?!([^<]+)?>)";
//new RegExp(`/^(${searchString})(?!([^<]+)?>)/`, 'gi');
setContent(content_?.replace(regEx, `<mark>${searchString}</mark>`)); //using React
但我的问题是它改变了所有的字符串,即使是在单词的中间。如果 searchString 仅以它开头,是否可以只更改字符串。
例如,如果我搜索字符串“年龄”:
错误场景 1(用法):
const sample1 = '<span>usage</span>'
// WRONG Result '<span>us<mark>age</mark></span>'
不应更改用法,因为它不以“年龄”开头。
正确的场景 2(代理商):
const sample2 = '<span>agencies</span>';
// CORRECT Result '<span><mark>age</mark>ncies</span>'
【问题讨论】:
-
你有
const regEx = /^(${searchString})(?!([^<]+)?>)/gi;吗?new RegExp(`/^(${searchString})(?!([^<]+)?>)/`, 'gi')不能做太多事情,因为开头和结尾都有斜线。 -
当您使用
new Regexp()创建正则表达式时,字符串中不应包含斜杠/。 -
@WiktorStribiżew 不工作 :(
-
由于您询问如何在字符串开头匹配整个单词,因此您需要在有它的地方使用
^并添加\b单词边界:@ 987654333@。关键是:你需要一个word boundary。另外,我认为如果你想用在它的确切大小写中找到的单词替换,替换必须是"<mark>$&</mark>"。 -
我不这么认为,但我发现问题陈述存在一些问题。请查看this fiddle。如有错误请更正并分享链接。
标签: javascript reactjs regex typescript