String.includes 找不到子字符串

Posted

技术标签:

【中文标题】String.includes 找不到子字符串【英文标题】:String.includes doesn't find substring 【发布时间】:2022-01-14 11:11:58 【问题描述】:

我有以下文字:

 LOG: time="2021-12-09T16:55:25+01:00" level=debug msg="????  GetLatestBlock called" blockHeight=3 blockID=ee98016d268630db54b814d18d0127edac8cc36f90d193c0c6f5fd4909bbd8b1
    ,LOG: time="2021-12-09T16:55:25+01:00" level=debug msg="????  GetAccountAtLatestBlock called" address=f8d6e0586b0a20c7
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="️✉️   Transaction submitted" txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9
    ,LOG: time="2021-12-09T16:55:26+01:00" level=info msg="⭐  Transaction executed" computationUsed=6 txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m \"Hello from Emulator\""
    time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m 0x1cf0e2f2f715450"
    time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m 0x179b6b1cb6755e31"
    time="2021-12-09T16:55:26+01:00" level=debug msg="????  Block #4 committed" blockHeight=4 blockID=5fd780a98baad6d30f66cf75e76c3e1c9398097a9bb2e3f239f0cd7e166f6932
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="????  GetTransactionResult called" txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9

存储在一个名为transactionLogs的变量中(所以你看到的输出是console.log(transactionLogs)),它是一个字符串。

我想检查事务日志是否包含两个地址。一封来自 Alice 0x01cf0e2f2f715450 和一封来自 Bob 0x179b6b1cb6755e31

我的问题是,当我像这样调用includes 时(其中AliceBob 是字符串):

Alice; // 0x01cf0e2f2f715450
Bob; // 0x179b6b1cb6755e31
transactionLogs.includes(Alice); // false
transactionLogs.includes(Bob); // true

对 Alice 的搜索返回 false

我认为它与转义反斜杠有关,所以我尝试运行 transactionLogs.replace(String.fromCharCode(92), '') 但这并没有改变结果。

这里发生了什么?为什么includes 没有为 Alice 返回true

【问题讨论】:

您为 Alice 提到的 Id,即 0x01cf0e2f2f715450 不在日志中,是吗? 我在你的文本中找不到 0x01cf0e2f2f715450,我只看到一个 0x1cf0e2f2f715450(注意缺少 0) Deepack 是正确的:日志中包含0x1cf...,因此搜索0x01cf... 将不起作用。 Alice 似乎是 0x1cf0e2f2f715450,而您正在寻找 0x01cf0e2f2f715450。记录 0x01cf0e2f2f715450 或返回 0x1cf0e2f2f715450 可能有什么问题? 也许你可以transactionLogs.includes(parseInt(Alice, 16).toString(16)) 【参考方案1】:

为什么包括不为爱丽丝返回true

因为日志字符串中不存在该字符串:

const transactionLogs = `
 LOG: time="2021-12-09T16:55:25+01:00" level=debug msg="?  GetLatestBlock called" blockHeight=3 blockID=ee98016d268630db54b814d18d0127edac8cc36f90d193c0c6f5fd4909bbd8b1
    ,LOG: time="2021-12-09T16:55:25+01:00" level=debug msg="?  GetAccountAtLatestBlock called" address=f8d6e0586b0a20c7
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="️✉️   Transaction submitted" txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9
    ,LOG: time="2021-12-09T16:55:26+01:00" level=info msg="⭐  Transaction executed" computationUsed=6 txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m \"Hello from Emulator\""
    time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m 0x1cf0e2f2f715450"
    time="2021-12-09T16:55:26+01:00" level=debug msg="\x1b[1;34mLOG\x1b[0m \x1b[2m[5a4689]\x1b[0m 0x179b6b1cb6755e31"
    time="2021-12-09T16:55:26+01:00" level=debug msg="?  Block #4 committed" blockHeight=4 blockID=5fd780a98baad6d30f66cf75e76c3e1c9398097a9bb2e3f239f0cd7e166f6932
    ,LOG: time="2021-12-09T16:55:26+01:00" level=debug msg="?  GetTransactionResult called" txID=5a46897e60f13ee68e11ef754983fefe9ec7bc8a2ca6079f0665e404138735e9
`;

const Alice = `0x01cf0e2f2f715450`;
const Bob = `0x179b6b1cb6755e31`;

console.log(
  Alice: transactionLogs.includes(Alice),
  Bob: transactionLogs.includes(Bob),
);

【讨论】:

【参考方案2】:

您似乎正在搜索交易日志中错误打印的十六进制地址。

我认为您应该更改事务日志逻辑以避免在记录时切断地址中的前导0。

否则,您必须从正在搜索的地址中删除前导零,即使用

transactionLog.includes('0x' + parseInt(Alice, 16).toString(16))

【讨论】:

以上是关于String.includes 找不到子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

如何更改python字符串子字符串信息

子串子序列问题

华为OD机试 - 最长连续子串(Python)| 真题+思路+考点+代码+岗位

[在python中使用正则表达式搜索字符串子字符串