问:
- 请实现一个函数用来匹配包含'. '和' * '的正则表达式。模式中的字符'.'表示任意一个字符,而' * '表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab * ac * a"匹配,但与"aa.a"和"ab * a"均不匹配。
解: 1.
function isMatch(str1, str2) {
function getRes(curI, curJ) {
if (curJ === str2.length) {
return curI === str1.length
}
// str2下一个字符不是*
if (curJ + 1 === str2.length || str2[curJ + 1] !== '*') {
if ( str2[curJ] === str1[curI] || str2[curJ] === '?') {
return getRes(curI + 1, curJ + 1)
} else {
return false
}
}
while (curI !== str1.length && (str2[curJ] === str1[curI] || str2[curJ] === '?')) {
if (getRes(curI, curJ + 2)) {
return true
}
curI++
}
return getRes(curI, curJ + 2)
}
return getRes(0, 0)
}