我需要评估两个字符串是否相等,即使它们有轻微的标点符号差异,这些差异不会使它们与Google搜索的目的不同。
例如,这些对被认为是相同的(以及您认为可能在Google中可能起作用的任何其他轻微的语法/拼写错误):
Who's on first?
whos on first.
Where's the beef/problem?
wheres the beef problem
JavaScript中是否有库函数可以执行此操作?
答案 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()
让你更接近,但这不是最好的方法。