我目前正在为Textual IRC开发主题,我想将“Topic is…”消息与频道主题栏中显示的主题进行比较,如果它们相同,则删除它们。
引起问题的主题中包含Umlaute和URI,如下所示:
++ Frische Austern ++ Nächste Sitzung: https:/some/uri/that/can/contain/umlaute" ++
当我打印旧主题和新主题时,它们看起来完全相同,包括尾随和前导空格(我使用trim()
消除了它们)。
比较是使用
if(oldTopic === newTopic){
// do stuff
}
我已经尝试过的
类型检查
我使用typeof
来确保两个字符串都是string类型而不是Object类型。
消除Umlaut
我使用replace(/ä/g, 'ae')
来消除Umlaut。
消除URL
我使用replace(/\//g, '_')
来去掉正斜杠,我使用escape()
来转义非Unicode字符。
很遗憾,这些方法都没有奏效。如果我使用console.log
来显示这两个字符串,它们完全相同。我本来以为可能涉及到一些Unicode的问题,例如用不同的方式表示ä,但是替换也没有奏效。
我想我已经达到了我的JavaScript知识极限,我真的不知道为什么它不起作用。这段代码在其他一些主题上是可以工作的,这些主题既没有涉及Umlaut,也没有涉及URL。
如果有人知道答案,我将非常感激。
谢谢您的帮助!
===
将返回true
。所以它们不相等。您已经尝试了我建议的第一件事(确保它们都是原始值,而不是对象)。第二件事是双重检查它们的长度,并循环遍历它们,找出它们在哪个字符处不同:if (str1.length !== str2.length) { console.log("lengths are different"); for (var n = 0; n < str1.length) { if (str1[n] !== str2[n]) { console.log(n + " different: '" + str1[n] + "' !== '" + str2[n] + "'"); } }
- T.J. Crowderfalse
。但是如果我打印它们的长度,它们都是111
个字符长。不同的字符是冒号后面的空格。 - JHolub"foo bar" !== "foo\tbar"
和"foo bar" != "foo bar"
(注意第二个字符串中有一个不间断空格)。 - T.J. Crowder\t
实际上是一个制表符而不是空格字符。最后两个有什么区别?因为我没有看到它们中的任何一个被打破,如何使用正则表达式捕获它们? - JHolub