Желаемое поведение
У меня есть проверка ввода, которая, помимо прочего, проверяет длину (< 140 chars
).
Мой ввод принимает уценку, и я бы хотел исключить длину URL в моем расчете длины.
Например, то, что выглядит как:
вот очень длинная ссылка на эту статью на Math.random ()
имеет длину 57
символов, тогда как фактический код для него составляет 155
символов, то есть:
here is a very long link to this article on [Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)
Сценарии, которые необходимо охватить, такие как:
text and [a markdown link](https://google.com)
text (and [a markdown link within parenthesis](https://google.com))
Этот вопрос о:
Как получить все значения в скобках в строке, включая вложенные скобки.
Что я пробовал
Мой текущий подход к общей проблеме:
- получить все значения в скобках в строке
- если любой начинается с
https
, создайте копию строки
- удалить значения из скопированной строки
- получить длину скорректированной строки и проверку длины прогона для этого
Это мои попытки по первой части:
01)
Это решение просто получает первый "матч", источник: https://stackoverflow.com/a/12059321
02)
Это решение получает все совпадения, включая круглые скобки, источник: https://stackoverflow.com/a/30674943
Но он не работает должным образом в сценарии с вложенными скобками, то есть:
var text = "text (and [a markdown link within parenthesis](https://google.com))";
var regExp = /(?:\()[^\(\)]*?(?:\))/g;
var matches = text.match(regExp);
console.log(matches);
// ["(https://google.com)"]
03)
Здесь есть php
решение регулярных выражений, которое, похоже, связано:
https://stackoverflow.com/a/12994041
но я не мог понять, как реализовать это регулярное выражение в javascript, то есть:
preg_match_all('/^\\((.*)\\)[ \\t]+\\((.*)\\)$/', $s, $matches);