Как использовать алгоритм сбалансированных скобок, чтобы заменить слова из строки javascript? - PullRequest
0 голосов
/ 22 февраля 2020

Давайте рассмотрим строку с именем str , которая определяется как:

var str = "I want to replace( this & ( this ) )"

Теперь я сделал что-то вроде этого:

str = str.replace(/replace\((.*?)\)/gm, function(_, a) {
  console.log("Replacing : " + a)
  return "it !"
}

Вывод :

// In Console
Replacing : this & ( this
// Returned
I want to it ! )

Но я хотел получить вывод:

// In Console
Replacing : this & ( this )
// In Return
I want it !

Я слышал об Алгоритме сбалансированных скобок . Поэтому может ли это помочь мне решить эту задачу? Если да, то как? Что делать, если в строке больше скобок? Если нет, как это можно сделать?

1 Ответ

1 голос
/ 22 февраля 2020

const str = "I want to replace ( this & ( this ) )"

const withoutPlaceholder = [str.split('to replace')[0], 'it!'].join('')
// output: I want it!

const withoutAllParenthesis = str.split(/\(([^)]+)\)/)
  .find(strPart => !strPart.includes('(') && !strPart.includes(')')) + ' it!'
// output: I want to replace it!

const balancedParenthesis = XRegExp.matchRecursive(str, '\\(', '\\)', 'g')[0]
const withoutBalancedParenthesis = str.split(balancedParenthesis).join('it!')
// output: I want to replace (it!)

console.log(withoutPlaceholder)
console.log(withoutAllParenthesis)
console.log(withoutBalancedParenthesis)
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.js"></script>

связанные вопросы и ответы: - Регулярное выражение для соответствия сбалансированным скобкам

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