使用正则表达式更新字符串

Update String using regex

本文关键字:字符串 更新 正则表达式      更新时间:2023-09-26

使用以下代码,我尝试使用正则表达式向字符串添加样式,而不是"已更新"设置为<'span style='color:blue' >test</span> text' 它被设置为'test text' .我是否滥用正则表达式?

来源 :

var text = 'test text';
var stringToStyle = 'test';                   
var update = "<span style='color:blue' >" + stringToStyle + "</span>";
var updated = text.replace('/'+stringToStyle+'/gi' , update);
console.log(update);
console.log(updated); 

普伦克尔 :https://plnkr.co/edit/6uO3M8kATQLXvWWVx1Vw?p=preview

您正在将字符串(而不是正则表达式)传递到.replace中。请注意,在具有正则表达式控制字符的情况下stringToStyle这不是很安全。

var regexp = new RegExp(stringToStyle, 'gi');
var updated = text.replace(regexp, update);

或者你可以直接通过stringToStyle,这将是安全的。

请注意,

您不能像在 PHP 中那样将变量与正则表达式分隔符连接起来。您需要使用 RegExp 构造函数表示法来使用变量构建动态模式。您可以安全地使用

var updated = text.replace(RegExp(stringToStyle.replace(/[.*+?^${}()|[']'']/g, "''$&"), "gi") , update);

.replace(/[.*+?^${}()|[']'']/g, "''$&")来自这个 MDN 参考。这个"技巧"将转义所有必须转义为正则表达式模式的特殊元字符。

如果您使用

var updated = text.replace(stringToStyle, update);

它将执行一次替换。也许,这就是你所需要的一切。