Как бы я разбил строку на две скобки с помощью регулярного выражения? - PullRequest
1 голос
/ 27 апреля 2019

Я работал с Discord.js и Node с быстрым ботом, чтобы что-то найти. Мне нужен способ найти все вхождения, которые появляются между двумя квадратными скобками, и сохранить их в виде массива строк. На данный момент я использую string-split () с некоторым регулярным выражением, но я не уверен, что регулярное выражение использовать.

Я пробовал использовать несколько разных, в том числе /[^\[\[]+(?=\]\])/g и \[\[(.*?)\]\] - я не против иметь фактические скобки в результатах, я могу удалить их вручную с помощью string.replace ().

Я также работаю над откатом с помощью обычной функции string.split () и других строковых функций, не полагаясь на регулярное выражение, но мне все еще интересно узнать о возможной версии регулярного выражения.

Результат с первым регулярным выражением совершенно неверен. Например, если я попытаюсь "does [[this]] work [at all]?", то вывод будет «[[]]» и «[вообще]», когда он действительно не должен принимать «вообще», но он показывает «[[это]] ».

Со вторым регулярным выражением я становлюсь немного ближе, оно возвращает «это» (правильно) и «[на всех]» (опять же, оно не должно принимать «вообще»).

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

Ответы [ 2 ]

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

Попробуйте мое решение

var str = "does [[this]] work [at all]?";
var regexp = /\[([a-z0-9\s]+)\]/ig;

var resultArray = str.match(regexp); 
resultArray = resultArray.map((item) => {
  return item.replace(/(\[|\])/g, "");
})

console.log(resultArray);
0 голосов
/ 27 апреля 2019

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

\[\[([^[\]]|(?R))*\]\]

То, что вы пытаетесь сделать, называется Соответствие сбалансированным конструкциям .Больше информации по ссылке.

При дальнейшем тестировании, к сожалению, JS не поддерживает (?R), поэтому это становится намного сложнее.Вы можете использовать XRegExp.matchRecursive дополнение из пакета XRegExp .

И ваше выражение \[\[(.*?)\]\] должно работать.Рабочий пример ниже.

var str = 'does [[this]] work [at all] with another double [[here]]?';

var result = str.match(/\[\[(.*?)\]\]/g);

var newDiv = document.createElement("div"); 
newDiv.innerHTML = result;
document.body.appendChild(newDiv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...