【问题标题】:How we can code the case insensitive in JavaScript?我们如何在 JavaScript 中编写不区分大小写的代码?
【发布时间】:2018-10-09 16:50:06
【问题描述】:

在我的项目中,我需要注意不区分大小写,我不知道如何在 JavaScript 中编写类似的代码。

如果我在终端上写,我需要让我的代码理解同样的事情:

`BOB
bob 
Bob`

我的代码:

       #!/usr/bin/env node

let chunk = "";

process.stdin.on("data", data => {
    chunk += data.toString();
});

process.stdin.on("end", () => {
    chunk.replace(/^\s*[\r\n]/gm,"").split(/\s+/).ignoreCase.forEach(function (s) {
        process.stdout.write(
        s === 'bob'
        ? 'boy \n'
        : s === 'alicia'
           ? 'girl\n'
           : s === 'cookie'
               ? 'dog \n'
               : 'unknown \n');
    });
});

我需要显示的结果是:

`boy
boy
boy`

我尝试用ignoreCase 来做,但它不起作用,你能解释一下为什么吗?

【问题讨论】:

  • 使用 toLowerCase 方法将输入更改为小写
  • .ignoreCase 不起作用,因为没有这样的东西;你刚发明的吗?您可以将字符串全部转换为大写或小写,然后进行比较。
  • 你同学在这里先问stackoverflow.com/questions/52724411/…8)
  • ignoreCase正则表达式上的一个方法。您不能将其应用于您正在迭代的字符串集合。
  • @mplungjan 如果您不介意,我想了解更多信息?

标签: javascript ignore-case


【解决方案1】:

只需在输入的所有字符串上使用String.prototype.toLowerCase,这样当您比较它们时,只有一种表示方式。

process.stdin.on("data", data => {
  chunk += data.toString().toLowerCase();
});

【讨论】:

  • toUpperCase 推荐
  • @mplungjan 为什么?
  • @mplungjan 是否有奇怪的 Unicode 极端情况可以使转换为大写更加可靠?
  • @mhodges 谢谢!它确实看起来像是一个 heckuva 微优化,但我会看看!
  • @zfrisch 但是,如果没有国际化,toLowerCase 几乎总是更有效,因为大多数文本都是小写的(需要进行的字符转换较少)。 More info about that here
【解决方案2】:

只需输入并使用String.toLowerCase()String.toUpperCase() 将其强制为全部小写或大写,然后将其与相同的大小写字符串进行比较:

console.log("test" === "Test"); // false
console.log("test" === "Test".toLowerCase()); // true
console.log("TeSt".toUpperCase() === "Test".toUpperCase()); // true

【讨论】:

  • toUpperCase 推荐
  • @mplungjan 为什么?我已经在 J​​S 世界中工作了 20 多年,但从未听说过。重要的是字符串的大小写相同——无论是大写还是小写都无关紧要。
  • @mplungjan 是由谁推荐的?
  • answer here, maybe(?) 这涉及国际化,但有点回答“为什么”的问题,特别是关于角色“往返”的原始问题的第二条评论
【解决方案3】:

RegExp.prototype.ignorecase 属性保存一个布尔值,用于判断是否为正则表达式设置了“i”标志。这不是一个函数,也不对表达式或字符串提供任何操作操作。

见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase

您可能需要考虑调用类似String.prototype.toLowerCase() 的函数,它将字符串转换为小写。

编辑:如果有帮助,我认为您可以将 toLowerCase() 放在 split() 之前,因为 toLowerCase() 是字符串的函数,而不是数组的函数。除非您以后想在每个字符串上单独调用它,否则在一个地方执行它可能是最快的,如下所示:

chunk.replace(/^\s*[\r\n]/gm,"").toLowerCase().split(/\s+/).forEach(function (s) {
   // function here
});

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多