Как получить строку между двумя строками при наличии экранирующих символов - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь получить строку между двумя строками, и она работает так:

if (text.toLowerCase().indexOf("[CUSTOMTAG]") >= 0) {
      _data = /\[CUSTOMTAG](.*?)\[\/CUSTOMTAG]/g.exec(text);
      if (_data[1] && _data[1].length > 0) {
        const data = _data[1];
      }
    }

Но у меня проблема, когда строка между содержит что-то вроде:

[CUSTOMTAG]this is some
[/ru ugly content here[/CUSTOMTAG]

Я получаю исключение здесь Cannot read property '1' of null, потому что анализ не выполнен. Как я могу игнорировать эквалайзер между символами?

1 Ответ

0 голосов
/ 23 апреля 2019

Это не элегантно, но работает.Возможно, вам придется внести некоторые изменения, но это альтернатива:

var input = `[CUSTOMTAG]this is some [/ru ugly content here[/CUSTOMTAG] [CUSTOMTAG]test2[/CUSTOMTAG]`;
var startIndex = 0, endIndex = 0, results = [];
while ((endIndex = input.indexOf("[/CUSTOMTAG]", endIndex)) >= 0 && (startIndex = input.indexOf("[CUSTOMTAG]", startIndex)) >= 0) {
	results.push(input.substring(startIndex + "[CUSTOMTAG]".length, endIndex));
	
	endIndex += "[/CUSTOMTAG]".length;
	startIndex += "[CUSTOMTAG]".length;
}
console.log(results);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...