如何评价“谁是第一个?”等于“先发制人”。在JavaScript?

时间:2010-11-23 20:59:44

标签: javascript regex string text comparison

我需要评估两个字符串是否相等,即使它们有轻微的标点符号差异,这些差异不会使它们与Google搜索的目的不同。

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

Who's on first?
whos on first.

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

JavaScript中是否有库函数可以执行此操作?

5 个答案:

答案 0 :(得分:3)

这实际上不是一项简单的任务,要做到正确,您需要查找stemming

答案 1 :(得分:1)

这是一种非常天真的方式,因为它显然无法处理像拼写错误这样的各种问题:

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;
};

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

类似的东西:

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;
}

答案 4 :(得分:0)

"who's on First?".replace(/[\?' ]/g,'').toLowerCase()

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