javascript 使用正则表达式全局替换字符串,如何在匹配结果基础上修改?

2020-08-13 15:50:07 +08:00
 black11black

如题,想给代码做个高亮,现在有这么个需求

比如现在有 html 字符串如下:

2020-01-01 20:20:20 [INFO] log test 1
2020-02-02 10:10:10 [INFO] log test 2

我想讲这个字符串修改为这样

<span style="color:green">2020-01-01 20:20:20</span> [INFO] log test 1
<span style="color:green">2020-02-02 10:10:10</span> [INFO] log test 2

即用正则表达式匹配到时间,然后再将匹配到的字符串两边加上<span></span>

正则的部分很简单可以匹配到,但是替换怎么搞呢?

有没有 js 大佬讲解一下这个需求能不能通过string.replace(/regexp/g , 'target')这种命令来完成,还是说要写一大段搜索-替换的逻辑才行

2036 次点击
所在节点    JavaScript
5 条回复
rain0002009
2020-08-13 16:20:34 +08:00
string.replace(/regexp/g , '<span style="color:green">$&</span>')
Juszoe
2020-08-13 16:27:31 +08:00
时间的匹配你自己修改一下
"2020-01-01 [INFO] log test 1".replace(/(\d{4}-\d{2}-\d{2})/g, '<span>$1</span>')
$1 表示正则中,第一个括号括起来的内容
Shawn211
2020-08-13 16:36:22 +08:00
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

'2020-01-01 20:20:20 [INFO] log test 1'.replace(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})(.*)$/, (match, p1, p2) => `<span style="color:green">${p1}</span>${p2}`)
sockball07
2020-08-13 16:42:02 +08:00
replace 参数 2 支持匿名函数,写 /看 起来比较清晰点
qiutianaimeili
2020-08-13 16:47:55 +08:00
let str='2020-01-01 20:20:20 [INFO] log test 1\n2020-02-02 10:10:10 [INFO] log test 2';
str.replace(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g,'<span style="color:green" >$&</span>');

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX