3

少なくともn文字、たとえば3文字の文字列と一致させたい。

たとえば、2つの単語がある場合、2つの単語に3文字の共通の部分文字列がある場合はtrueを返したい

つまり、CaliforniaとUnicalを一致させる場合、両方に共通の文字列として「Cal」があるため、trueになりたいと思います。

4

4 に答える 4

0
function findCommonSubstring(s1, s2, n) {

    s1 = s1.toLowerCase();
    s2 = s2.toLowerCase();
    var min = s1.length < s2.length ? s1 : s2;
    var max = min == s1 ? s2 : s1;

    if(n <= 0 || n > min.length) {
        return false;
    }

    var substring;
    for(var i=0; i<=min.length-n; i++) {
        if(max.indexOf((substring = min.substring(i, i+n))) > -1) {
            return substring;
        }
    }

    return false;
}

電話:

alert(findCommonSubstring("California", "Unical", 3));​

プリント:

cal

デモ

于 2012-11-12T10:12:44.323 に答える
0
function matchStrings(s1, s2, charnum) {
    var found = false;
    var i = 0;
    if ( charnum>0 && charnum<s2.length ) {
        s1=s1.toLowerCase();
        s2=s2.toLowerCase();
        for (i=0; i<=s2.length - charnum; i++) {
            if ( s1.indexOf(s2.substr(i, charnum)) > -1 ) {
                found = true;
                break;
            }
        }
    }
    return found;
}
于 2012-11-12T10:06:47.893 に答える
0
function test(first,second,nl)
{
    first=first.toLowerCase();
    second=second.toLowerCase();

   if(first.length>second.length)
   {
       var len=first.length ;
   }
   else
   {
       var len=second.length;
       var t=first;
       first=second;
       second=t;
   }

   //var len=first.length>second.length?first.length:second.length;

   var count=0;
   while(len>=nl)
   {
       str=first.substr(count,nl);
       if(second.indexOf(str)!=-1)
       {
           return str;
           break;
       }
       count++;
       len--;
   }
   return false;        
}
 alert(test('Cal','unicbbl',4))  
 alert(test('California','unicali',3));
 alert(test('California','unicali',4));
[test here][1]


  [1]: http://jsfiddle.net/tuMRg/5/
于 2012-11-12T10:10:32.130 に答える
0

以下は非常に複雑ですが、大きなコンテンツから文字列を検索する場合は、これが適切な選択です。可能な一致をフィルタリングすることから始め、次にそれらの可能性をテストします。

var atLeastMatch = function(search, content, atLeast) {
    var search = search,
        content = content,
        regex = new RegExp('[' + search + ']{' + atLeast + ',}', "i", "g"),
        possibleMatches = content.match(regex);

    for (var i = 0, j = possibleMatches.length; i < j; i++) {
        if (possibleMatches[i].length > atLeast) {
            for (var k = 0, l = possibleMatches[i].length - atLeast; k <= l; k++) {
                if ((new RegExp(possibleMatches[i].slice(k, k + atLeast), "i")).test(search)) {
                    return true;
                }

            }

        } else {
            if ((new RegExp(possibleMatches[i], "i")).test(search)) {
                return true;
            }

        }

    }

    return false;

}

console.log(atLeastMatch('California', 'Unical', 3));
于 2012-11-12T10:43:32.887 に答える