如何将字符串与 javascript 中的正则表达式模式匹配,但字符串不必遵循正则表达式模式中的串行排列。 针对包含括号的字符串进行正则表达式模式测试,条件为:
这是我尝试过的;
const pattern = /^(\(\))*(\{\})*(\[\])*$/
如果我针对这些字符串进行测试,它工作正常
console.log(pattern.test("(){}[]")) //returns true
console.log(pattern.test("(]") //returns false
但是如果更改括号在正则表达式中出现的顺序,那么我会得到错误
console.log(pattern.test("{}()[]") // returns false
我希望括号串能够匹配模式,无论哪个括号在前或在后,只要满足上述条件即可
让我们编写一个解析器! 好吧,因为我们关心的只是括号,所以我们可以在从左到右读取时使用堆栈数据结构,并在读取过程中推入和弹出。
var exp1 = "(){(inner)[]}[]"
var exp2 = "(]"
console.log(checkParenthesis(exp1))
console.log(checkParenthesis(exp2))
function checkParenthesis(str) {
var stack = []
for (const char of str) {
if (isOpenParenthesis(char)) {
stack.push(char)
} else if (isCloseParenthesis(char)) {
if (stack.length == 0) {
return false
}
if (!compareParenthesis(stack.pop(), char)) {
return false
}
}
}
return stack.length == 0
}
function compareParenthesis(a, b) {
return a == '(' && b == ')' || a == '[' && b == ']' || a == '{' && b == '}'
}
function isOpenParenthesis(a) {
return a == '(' || a == '[' || a == '{'
}
function isCloseParenthesis(a) {
return a == ')' || a == ']' || a == '}'
}