为了账号安全,请及时绑定邮箱和手机立即绑定

JS replace 正则:求大神进来看一看,弄了一下午了没弄出来

JS replace 正则:求大神进来看一看,弄了一下午了没弄出来

红颜莎娜 2018-12-07 12:20:01
原始字符串 var sourceText=""; sourceText有很多种情况。 比如: 情况1: sourceText="Where there is great love, <span style="color: #0000ff; font-weight: bold;">there</span> are always miracles."; 情况2:sourceText="Where there is great love, <span style="color: #0000ff; font-weight: bold;">there</span> <span style="color: #0000ff; font-weight: bold;"> are</span> always miracles."; 情况3:... 需要处理的字符串:there are always 现在的需求是: 从原始字符串中找到需要处理的字符串,然后高亮加黄色背景显示。但是原始字符串里可能所有的单词都已经被加粗和加字体颜色,这样直接找"there are always"这个字符串是找不到的。需要处理的字符串可能是一个单词,也可能是一个句子。   以sourceText为情况2和需要处理的字符串是there are always举例, 需要得到的结果是:Where there is great love, <span style="background-color:yellow;font-we;ight:inherit;"><span style="color: #0000ff; font-weight: bold;">there</span> <span style="color: #0000ff; font-weight: bold;"> are</span> always</span> miracles.   跪求大神不吝赐教!!! 能帮忙写出code最佳!!! 一下午没弄出来,实在是没招了!!! 在线等, Help me...
查看完整描述

35 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

这是C#正则吗?  我把这个转成JS正则以后报错了。 大神,能帮忙写一个完整点的JS正则吗?

查看完整回答
反对 回复 2018-12-24
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

大神, 你这得到的结构是Where there is great love, <span style="background-color:yellow;><span style="color: #0000ff; font-weight: bold;">there</span> are always</span> miracles.   只有there被高亮了。 我的需求是words 数组里的都得高亮。、

多谢了。 能帮忙继续写写demo吗?

查看完整回答
反对 回复 2018-12-24
?
UYOU

TA贡献1878条经验 获得超4个赞

@请叫我头头哥: 我看着大片的正则,我就头大。。

查看完整回答
反对 回复 2018-12-24
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

@幻天芒: 老幻, 你也太谦虚了吧?  我看是你不愿意弄而已。 话说这个正则难倒是不难, 但是确实挺麻烦的。

查看完整回答
反对 回复 2018-12-24
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

@请叫我头头哥: 头头哥,我正则太弱,用正则搞不定。。。

查看完整回答
反对 回复 2018-12-24
?
烙印99

TA贡献1829条经验 获得超13个赞

@GEEKc: 我用正则是玩不转这个的,那就只能一层层的去解析,然后分别处理了。我的方法太复杂了,先尝试下他们提供的正则匹配嘛吧。。

查看完整回答
反对 回复 2018-12-24
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

@请叫我头头哥: 多谢头头哥老师

查看完整回答
反对 回复 2018-12-24
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

@幻天芒: 嗯,就像头头老师说的那样,多谢幻老师了,在线等!

查看完整回答
反对 回复 2018-12-24
?
开满天机

TA贡献1786条经验 获得超13个赞

@GEEKc: 需要将原本的高亮干掉? 如果不需要的话,直接取出result = innerHTML.replace(/xxx/gi, '高亮之后的html代码');  然后再赋值回去。。

查看完整回答
反对 回复 2018-12-24
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

对, 就是关键字(可能是一个句子也可能只是一个单词)高亮加黄色背景。但是原始的字符串中可能某些单词已经被做其他高亮处理(加粗加蓝色), 是需要用正则替换, 但是这个正则不会写。 

幻老师可以帮忙写一个小的demo吗? 多谢了。

查看完整回答
反对 回复 2018-12-24
?
holdtom

TA贡献1805条经验 获得超10个赞

话说,你的需求应该是指定关键字高亮吧?直接用正则替换不行么?

查看完整回答
反对 回复 2018-12-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

@Yu: 这个background-color:yellow;font-we;ight:inherit;是写错了还是正则的语法啊?

算了, 不纠结了, 答案已经有了。 谢谢Yu老师悉心指导。

查看完整回答
反对 回复 2018-12-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

@GEEKc: 那你测试有问题

查看完整回答
反对 回复 2018-12-24
?
弑天下

TA贡献1818条经验 获得超8个赞

@Yu: 还是不行啊, 运行的时候匹配不到情况2啊

查看完整回答
反对 回复 2018-12-24
?
狐的传说

TA贡献1804条经验 获得超3个赞

你要先用正则把<>都去掉.然后就能获取到

查看完整回答
反对 回复 2018-12-24
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

@司幸: 司幸老师,这个for循环是什么语法啊?  没有这种写法吧?

跪求完整的能运行的demo。多谢了。

查看完整回答
反对 回复 2018-12-24
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

@GEEKc: var tem  = sourceText .match(/(<span[^>]*>)*\s*there\s*(<\/span>)*\s*(<span[^>]*>)*\s*are\s*(<\/span>)*\s*(<span[^>]*>)*\s*always\s*(<\/span>])*/g);

for(tem){

sourceText=sourceText .replace(tem[i],<span>tem[i]</span>)

}

console.log(sourceText)

查看完整回答
反对 回复 2018-12-24
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

@司幸: 对,就是可能的情况是

<span style="color: #0000ff; font-weight: bold;">there</span> <span style="color: #0000ff; font-weight: bold;">
are</span> always 替换成 <span style="background-color:yellow;font-we;ight:inherit;"><span style="color: #0000ff; font-weight: bold;">there</span> <span style="color: #0000ff; font-weight: bold;">are</span> always</span>
也可能是there <span style="color: #0000ff; font-weight: bold;">are</span> always 替换成 <span style="background-color:yellow;font-we;ight:inherit;">there <span style="color: #0000ff; font-weight: bold;">are</span> always</span>

还可能是there are always 替换成 <span style="background-color:yellow;font-we;ight:inherit;">there are always</span>
也就是每个单词都有可能会被<span style="color: #0000ff; font-weight: bold;"></span>这么一组span标签所标注。我们需要从原始字符串中找到一串指定字符串加上<span style="background-color:yellow;font-we;ight:inherit;"></span>

多谢司幸老师, 有劳了 :[

查看完整回答
反对 回复 2018-12-24
?
SMILET

TA贡献1796条经验 获得超4个赞

@GEEKc: 了解了,你的意思是 <span><span><span>there</span></span> are</span>aways 这种情况也是会出现的吗。替换后<span><span><span><span>there</span></span> are</span>aways </span>?

查看完整回答
反对 回复 2018-12-24
?
隔江千里

TA贡献1906条经验 获得超10个赞

@司幸: 因为sourceText在这之前可能就已经有span标签存在字符串里面了,如果把这些处理掉的话,是能匹配到there are always,也能追加进去,但是之前的标签就没了。这里需要保存原来的标签。

查看完整回答
反对 回复 2018-12-24
首页上一页12下一页尾页
  • 35 回答
  • 0 关注
  • 871 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信