Замените строку регулярного выражения, сохраняя при этом оригинальные переводы строк - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть несколько строк:

Мой ввод:

var str = `The left lower lung thick parenchymal band as seen on prior 
           scan remains not hypermetabolic.The posterior left lung base tiny
           density as seen on prior scan remains not significantly 
           hypermetabolic.`;
var element = 'The left lower lung thick parenchymal band as seen on prior scan remains not hypermetabolic';
var newElement = '<p1>The left lower lung thick parenchymal band as seen on prior scan remains not hypermetabolic</p1>';

Как я могу заменить element на newElement в моем исходном str с помощью регулярных выражений?

Моя попытка:

str.replace(/[^\\S ]/, ' ').replace(element, newElement) 

Когда я пытаюсь заменить с помощью регулярных выражений, я не могу игнорировать символы новой строки и заменять их одновременно.

Ожидаемый результат:

var str = `<p1>The left lower lung thick parenchymal band as seen on prior
            scan remains not hypermetabolic</p1>.The posterior left lung base tiny  
            density as seen on prior scan remains not significantly
            hypermetabolic.`;

1 Ответ

2 голосов
/ 10 февраля 2020

Вы можете создать регулярное выражение динамически, изменив интервал в строке element на \s+: он также будет соответствовать символам новой строки:

var str = `:
    The left lower lung thick parenchymal
    band as seen on prior scan remains not hypermetabolic.  The posterior left 
   lung base tiny  density as seen on prior scan remains not significantly 
   hypermetabolic.
 `;

var element = 'The left lower lung thick parenchymal band as seen on prior scan remains not hypermetabolic';
var newElement = '<p1>The left lower lung thick parenchymal band as seen on prior scan remains not hypermetabolic<p1>';

let regex = RegExp(element.replace(/ +/g, "\\s+"), "g");
str = str.replace(regex, newElement);

console.log(str);

Если вы хотите, чтобы замена также сохранила исходные символы новой строки (при условии, что вы хотите обернуть только в пределах двух <p1>), тогда используйте $& обратная ссылка в newElement:

var str = `:
    The left lower lung thick parenchymal
    band as seen on prior scan remains not hypermetabolic.  The posterior left 
   lung base tiny  density as seen on prior scan remains not significantly 
   hypermetabolic.
 `;

var element = 'The left lower lung thick parenchymal band as seen on prior scan remains not hypermetabolic';
var newElement = '<p1>$&<p1>';

let regex = RegExp(element.replace(/ +/g, "\\s+"), "g");
str = str.replace(regex, newElement);

console.log(str);

Примечание:

Не ясно, что означает <p1>. Если предполагается, что это тег XML, то следует понимать, что закрывающий тег должен быть </p1> с прямой строкой sh.

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

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