替换和替代文本

时间:2019-03-04 16:07:58

标签: regex

In an HTML page, replace the text micro with &micro; and don't screw up the code: don't replace inside <the tags> or &entities;

我想从左到右替换列表。

micro    &micro; 
micro;   &micro;;
micro>   &micro;>

我的代码可以匹配micro micro> micro; &micro;

(micro)(?![^;&< ]*;[;>]) 

或仅匹配micro micro>

(micro)(?![^;&< ]*;) 

但是我只想匹配micro micro> micro;而没有&micro;

这并不像我想的那么简单。

正则表达式demo

替换

&micro;

参考

Regex replace text outside html tags

3 个答案:

答案 0 :(得分:1)

使用给定的正则表达式最简单的方法就是签入replace的回调函数。

let str = `micro    &micro; 
micro;   &micro;;
micro>   &micro;>`

let op = str.replace(/(&?micro)(?![^;&< ]*;[;>])/g, function(match,g1) {
  if( g1.startsWith('&') ) {
    return `${g1};`
  } else {
    return `&${g1};`
  }
})

console.log(op)

答案 1 :(得分:0)

(?<!&)(micro)适用于给定的示例。

答案 2 :(得分:0)

尝试此正则表达式:

(?<!&)(micro[^A-Za-z0-9])

正在运行的演示:https://regex101.com/r/pxALtw/1/