Open goldEli opened 4 years ago
思路:递归比对每一个字母
/**
* @param {string} s 字符串
* @param {string} p 正则
* @return {boolean}
*/
const isMatch = (s, p) => {
// 当正则与字符串匹配长度不一致返回 false,反之为 true
if (!p) return !s
const firstMatch = s[0] === p[0]
/**
* 如果正则第二字母包含星号
* 1) 依次匹配字符串的字母
* 2) 当 1)匹配结束后,将正则过滤掉星号和第一字母,匹配后续是否match
*/
if (p[1] === "*") {
return (firstMatch && isMatch(s.substr(1), p)) || isMatch(s, p.substr(2))
}
return firstMatch && isMatch(s.substr(1), p.substr(1))
}
function isMatch(str, reg) {
var r = reg.split('*')
// "a"
if (r.length === 1) return false
if (r[1] === '') {
// a*
return str.indexOf(r[0]) === -1 ? false : true
} else {
// a*b
return str.indexOf(r[1]) === -1 ? false : true
}
}