【问题标题】:Replace a string but only at the start of the string [duplicate]替换字符串,但仅在字符串的开头[重复]
【发布时间】: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})(?!([^&lt;]+)?&gt;)/gi;吗? new RegExp(`/^(${searchString})(?!([^&lt;]+)?&gt;)/`, 'gi') 不能做太多事情,因为开头和结尾都有斜线。
  • 当您使用new Regexp() 创建正则表达式时,字符串中不应包含斜杠/
  • @WiktorStribiżew 不工作 :(
  • 由于您询问如何在字符串开头匹配整个单词,因此您需要在有它的地方使用^并添加\b单词边界:@ 987654333@。关键是:你需要一个word boundary。另外,我认为如果你想用在它的确切大小写中找到的单词替换,替换必须是"&lt;mark&gt;$&amp;&lt;/mark&gt;"
  • 我不这么认为,但我发现问题陈述存在一些问题。请查看this fiddle。如有错误请更正并分享链接。

标签: javascript reactjs regex typescript


【解决方案1】:

你可以这样做:

let searchString = "agencies";
const regEx = new RegExp(/^age/, 'gm');

let newstr = searchString.replace(regEx, `<mark>${searchString}</mark>`)
console.log(newstr)

输出:&lt;mark&gt;agent&lt;/mark&gt;

PS:它是基于 JavaScript 的简单实现,也可以应用在 react 中。

【讨论】:

  • 是的,但是在 html 标签中排除它的正则表达式被排除在外,而且字符串“年龄”是硬编码的
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2016-09-22
  • 2015-10-08
  • 1970-01-01
  • 2018-05-13
  • 2011-10-10
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多