字串模糊匹配
-
从字符串string开始完整匹配子串sub,返回匹配到的字符个数。
-
sub中如果出现’?‘表示可以匹配一到三个除’\0’以外的任意字符。
如果sub还有找不到匹配的字符,则说明不能完整匹配。 -
如果能完整匹配,返回匹配到的字符个数,如果有多种匹配方式,返回匹配字符数最少的那个,如果不能完整匹配,返回-1
输入
abcdefg
a?c
输出
3
本题的坑在于,子串必须从头匹配
var readline=require('readline');
const r1=readline.createInterface({
input:process.stdin,
output:process.stdout
})
var str1='';
var str2='';
var time=0;
r1.on('line',function(line){
//console.log(time)
if(time==0){
str1+=line;
time++;
}else{
str2+=line;
var c=str2.split('');
for(var i=0;i<c.length;i++){
if(c[i]=='?'){
c[i]='(.){1,3}';
}
}
str2=c.join('');
//正则表示不区分大小写(i)的从头(^)匹配
var reg = new RegExp("^"+str2+"","i")
var d =[];
//d中存储匹配的结果,exec匹配结果为满足条件的所有元素的数组集合
d = reg.exec(str1);
//test可以返回该父串中是否包含子串
if(reg.test(str1)){
console.log(d[0].length)
}else{
console.log(-1)
//console.log(111)
}
}
})