Замена и замена текстов - PullRequest
0 голосов
/ 04 марта 2019
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;

Это не так просто, как я думал.

Regex demo

Substitution

&micro;

Ссылка

Regex заменяет текст вне HTML-тегов

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Попробуйте это регулярное выражение:

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

Рабочая демонстрация: https://regex101.com/r/pxALtw/1/

0 голосов
/ 04 марта 2019

Самое простое, что вы можете сделать с помощью заданного регулярного выражения, это проверить функцию обратного вызова замены.

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)
0 голосов
/ 04 марта 2019

(?<!&)(micro) работает для данного примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...