字符串比较(可能是隐藏的字符问题?)

时间:2010-01-18 15:53:27

标签: javascript string blogger

我正在尝试用博客博客做一些奇特的事情,当我看一个特定的博客时,我希望能够知道它是哪一个。

所以,虽然可能有更好的方法,但我已经设置了这段代码:

//Get title of current blog
currentTitle = document.getElementById("post-title").innerText;
currentTitle = currentTitle.replace(/<\/?[^>]+(>|$)/g, "");
currentTitle = currentTitle.replace("/n","");
currentTitle = currentTitle.replace("/r","");
//Run through titles until you find a match
for (count = 0; count <= titles.length; count++)
{
  //alert(currentTitle);
  //alert(titles[count]);
  if (titles[count] != null)
  {
    checkTitle = titles[count];
checkTitle = checkTitle.replace(/<\/?[^>]+(>|$)/g, "");
    checkTitle = checkTitle.replace("/n","");
    checkTitle = checkTitle.replace("/r","");
alert(checkTitle.toString()+" + "+currentTitle.toString());
    if (checkTitle.toString() == currentTitle.toString())
    {
      alert(count);
    }
  }
}

其中titles []是从RSS提要读入的标题数组(想法是,如果我得到标题的索引,我可以将其应用于我从所述提要中读取的另一个数组)。 / p>

事情是,虽然第一个警报产生两个看起来相同的字符串,但它们不会被if ...语句拾取。我添加了一些行来将两个变量设置为相同的字符串,然后选择它们。我能想到的唯一解决方案就是我错过了一个隐藏的角色或其中一个字符串中的某些内容,但我想我已经覆盖了所有这些内容!有人有任何想法吗?

4 个答案:

答案 0 :(得分:3)

尝试\n\r。您可能还想要.trim()删除多余的空格。

编辑: 正如Jonas指出的那样,JavaScript中没有原生的.trim()函数,因此您可以创建自己的this link描述。

答案 1 :(得分:2)

为什么你要从已经是纯文本的标题中删除类似标签的结构(使用正则表达式,这对于它来说是不可靠的;不要)? (来自innerText;仅适用于IE;其他浏览器则需要标准textContent属性。)RSS标题不是双重编码的HTML-in-XML(尽管可以是长描述)。

无论如何,你试图删除\n\r,但是你得到了错误的斜杠。你完全有可能在那里仍然有前导和尾随空格或标签。正如Shawn所说,在比较之前你最好修剪所有这些空白字符,例如:

// assuming each item in `titles` has already been trimmed too
var el= document.getElementById("post-title");
var title= 'textContent' in el? el.textContent : el.innerText;
var count= titles.indexOf(title.trim());

但是,这个简洁的代码使用了一些尚未在所有浏览器中提供的ECMAScript第五版方法:map上的indexOfArray以及trim上的String // Add some ECMA262-5 methods if not already supported natively // if (!('indexOf' in Array.prototype)) { Array.prototype.indexOf= function(find, from) { for (var i= from || 0, n= this.length; i<n; i++) if (i in this && this[i]===find) return i; return -1; }; } if (!('map' in Array.prototype)) { Array.prototype.map= function(mapper, that) { var other= new Array(this.length); for (var i= 0, n= this.length; i<n; i++) if (i in this) other[i]= mapper.call(that, this[i], i, this); return other; }; } if (!('trim' in String.prototype)) { String.prototype.trim= function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }; } 。但是,对于不支持它的浏览器,您可以自己将它们添加到语言中:

{{1}}

答案 2 :(得分:0)

你可以尝试

alert(checkTitle.toString().length+" + "+currentTitle.toString().length);

toUpperCase()以及trimming这些字符串可能会在某处导致。


答案 3 :(得分:0)

一些调试提示:你的换行符和回车替换中有正斜杠而不是反斜杠。他们应该是\ n&amp; \ r。当你发出警报时,尝试在每个标题之前和之后放置一个字符,这样你就可以看到字符串的边界。如果没有显示您缺少的字符,请使用for循环并逐步执行每个字符串以使用string.charAt(i)查看所有字符。对于字符串比较,您应该使用===而不是==。