【问题标题】:How to evaluate "Who's on first?" as being equal to "whos on first." in JavaScript?如何评价“谁先上?”等于“谁先上”。在 JavaScript 中?
【发布时间】:2010-11-23 20:59:43
【问题描述】:

我需要将两个字符串评估为相等,即使它们之间存在细微的标点差异,这不会使它们在 Google 搜索中有所不同。

例如,这些对将被视为相等(以及您认为可能在 Google 中起作用的任何其他小的语法/拼写错误):

Who's on first?
whos on first.

Where's the beef/problem?
wheres the beef problem

JavaScript 中是否有一个库函数可以做到这一点?

【问题讨论】:

  • 您可以在比较之前从两个字符串中去掉标点符号。

标签: javascript regex string text comparison


【解决方案1】:

这实际上不是一个简单的任务,要正确完成它需要查找stemming

【讨论】:

    【解决方案2】:

    这是一种非常幼稚的方法,因为它显然不能处理诸如拼写错误之类的所有问题:

    var a = "some text totest....ok";
    var b = "sometext totest ok";
    
    function testRoughEquality(a, b) {
      var ax = a.replace(/[^a-z]/gi, "");
      var bx = b.replace(/[^a-z]/gi, "");
    
      if(ax === bx)
        {
        alert('These strings were roughly the same: "' + a + '" and "' + b + '"');
        }
      return true;
    };
    

    【讨论】:

    • 虽然这当然等同于“我帮我叔叔杰克下马”和“我帮我叔叔下马”:)
    • @Phrogz 确实如此!我敢打赌启发式方法也会出错,但是我从来没有写过语言分析器。
    【解决方案3】:

    最简单的答案是删除无关紧要的字符(示例中的撇号和标点符号),将其他字符规范化为单词分隔符(示例中的斜杠),然后将很多字符小写。

    var strs = ["Who's on first?","whos on first."];
    for (var i=0,len=strs.length;i<len;++i){
      strs[i] = strs[i].replace(/['?.]/g,'').replace(/[\/]/g,' ').toLowerCase();
    }
    console.log( strs[0] == strs[1] );
    // true
    

    【讨论】:

      【解决方案4】:
      "who's on First?".replace(/[\?' ]/g,'').toLowerCase()
      

      让你更接近,但这不是最好的方法。

      【讨论】:

      • 我更喜欢 Jonathon 的回答。虽然不考虑大小写。你仍然想使用 .toLowerCase()
      【解决方案5】:

      如果只是标点和大小写问题(如上面的示例),一个简单的解决方案是通过正则表达式来删除某些标点字符,然后转换为小写并进行比较。

      类似:

      function stringCompare(str1, str2)
      {
          var test = /[\?\'\/]/g;
          var s1 = str1.replace(test,"").toLowerCase();
          var s2 = str2.replace(test,"").toLowerCase();
          if(str1 === str2) { return true; }
          return false;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 2012-09-15
        相关资源
        最近更新 更多