将字符串匹配到部分匹配的Javascript

将字符串匹配到部分匹配的Javascript,javascript,Javascript,如何在Javascript中进行部分字符串匹配 e、 g.匹配“Alf” “阿尔弗雷德”->没错 “阿尔夫”->对 “阿尔夫”->对 ‘al’->对 “已更改”->错误 “一半”->错误 ''->错误 “鲍勃”->错 我欢迎更短/更多地使用javascript内置函数 var arr=['Alfred'、'Alf'、'Alf'、'al'、'altered'、'half'、'bob']; arr.forEach(函数(元素){ 添加(元素+“->”+匹配项(元素'Alf')); }); 功

如何在Javascript中进行部分字符串匹配

e、 g.匹配“Alf”

  • “阿尔弗雷德”->没错
  • “阿尔夫”->对
  • “阿尔夫”->对
  • ‘al’->对
  • “已更改”->错误
  • “一半”->错误
  • ''->错误
  • “鲍勃”->错

我欢迎更短/更多地使用javascript内置函数

var arr=['Alfred'、'Alf'、'Alf'、'al'、'altered'、'half'、'bob'];
arr.forEach(函数(元素){
添加(元素+“->”+匹配项(元素'Alf'));
});
功能忽略情况(s1、s2){
var needleRegExp=新的RegExp(“^”+s2+“$”,“i”);
返回REGExp.test(s1)
}
函数部分化器(字符串){
var out=[];
对于(变量i=1;i

使用.indexOf查找字符串中是否有匹配项。 指

function matches(text, partial) {
  return text.toLowerCase().indexOf(partial.toLowerCase()) > -1;
}

function matchesCase(text, partial) {
  return text.indexOf(partial) > -1;
}

https://jsfiddle.net/zbzc5tqe/3/

如果只想匹配区分大小写的字符串,请使用matcheCase()函数。

似乎只想知道字符串是否以子字符串开头:

功能测试(arr、sub){
sub=sub.toLowerCase();
返回arr.map(str=>str
.toLowerCase()
.startsWith(子切片(0,数学最大值(str.length-1,1)))
);
}
var arr=['Alfred','Alf','Alf','al','altered','half','bob'];
var结果=测试(arr,'alf');

控制台日志(结果)以前没有检查部分用例,您可以像下面一样使用正则表达式

   var value = 'ALF';
   var comparor = value.slice(0, element.length - 1);
   var regexp = new RegExp("^"+comparor, "i");
   regexp.test(element);
var arr=['Alfred','Alf','Alf','al','half','bob'];
var值='00';
arr.forEach(函数(元素){
var比较器=(element.length>1)?value.slice(0,element.length-1):值;
var regexp=new regexp(“^”+比较器,“i”);
添加(元素+“->”+regexp.test(元素));
});
函数添加(文本){
var olList=document.getElementById('list');
var newListItem=document.createElement('li');
newListItem.innerText=文本;
olList.appendChild(newListItem);
}


我建议查看正则表达式
al
应该是
true
,而
half
应该是
false
。我没有真正意识到“al”应该是true,“half”应该是false。同意如果用indexOf==0替换你的答案效果更好,因为如果使用startWith方法,我编辑了一个额外的测试用例,那么“A”将是错误的:啊,是的,我在向后看这个问题。没有考虑过删减“输入”谢谢。有一点需要注意,str.toLowerCase对国际化不友好。我也没想到StartWith会以这种方式处理空白输入。@RyanTheLeach,很好地了解了国际化。另外,根据您的浏览器支持,startsWith可能不受支持,但是,可以很容易地切换到indexOf==0。@RyanTheLeach,我添加了两个改进。1,检查时子字符串应为小写。2,sub.slice的最小值应始终为1,否则只传递'a'将产生错误的结果。您的答案在以下测试用例中失败:“al'->truesorry,对于3年后的注释,但传递单个字符作为值,例如“o”失败,它将空值(来自您的JSFIDLE示例)返回为true,当它应该为false时。@Andrew good catch,我没有检查所有的测试用例:)是否已在代码中进行了更改以包含您提到的用例。显然,在单个字符或空字符上执行slice并用1对其进行减法运算将得到一个空值,而不是期望值