How we can code the case insensitive in JavaScript?
在我的项目中,我需要注意不区分大小写,我不知道如何用JavaScript编写类似的代码。
如果我在终端上写东西,我需要我的代码来理解同样的事情:
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/usr/bin/env node
let chunk ="";
process.stdin.on("data", data => {
chunk += data.toString();
});
process.stdin.on("end", () => {
chunk.replace(/^\s*[
]/gm,"").split(/\s+/).ignoreCase.forEach(function (s) {
process.stdout.write(
s === 'bob'
? 'boy
'
: s === 'alicia'
? 'girl
'
: s === 'cookie'
? 'dog
'
: 'unknown
');
});
}); |
我需要显示的结果是:
我试着用ignoreCase做,但不起作用,你能解释一下为什么吗?
- 使用ToLowercase方法将输入更改为小写
- 因为没有这样的东西,所以.ignoreCase不起作用;你只是发明了它吗?您可以将字符串转换为所有大小写,然后进行比较。
- 你的同学首先在这里问了stackoverflow.com/questions/52724411/…8)
- @不,我不是发明的。我在一门课上看到的,你能帮我吗?
- @建议使用Sorikairo Touppercase
- ignoreCase是正则表达式的一种方法。您不能将它应用于正在迭代的字符串集合。
- @如果你不介意的话,我想多听听关于这个的事?
- @Shirleytruffier blanc .ignoreCase很可能是您看到的自定义函数,而不是本机函数。
- docs.microsoft.com/en-GB/VisualStudio/code quality/…
- 您的输入和输出是否真的有反勾号?
只需在输入的所有字符串上使用String.prototype.toLowerCase,这样当您比较它们时,只有一种方法可以表示它们。
1 2 3
| process.stdin.on("data", data => {
chunk += data.toString().toLowerCase();
}); |
- 建议使用接线盒
- 为什么?
- @mplungjan是否有奇怪的unicode角盒,使转换为大写更加可靠?
- 谢谢@zfrisch给你答案
- 回答这里,也许(?)这涉及到国际化,但也回答了"为什么"的问题,特别是关于人物"往返"的原始问题的第二条评论。
- @谢谢你!这看起来确实是一个非常好的微观优化,但我会看看的!
- @然而,没有国际化的zfrisch,to lowercase几乎总是更有效,因为大多数文本都是小写的(要进行的字符转换更少)。这里有更多的信息
- stackoverflow.com/questions/2140627/…and this docs.microsoft.com/en GB/VisualStudio/code quality/…
- @mplungjan,仅在处理国际化和区域设置比较时使用。一般来说,由于我上面所述的原因,大多数字符串比较都更适合与.toLowerCase()进行比较。
- 假设这是个问题。
RegExp.prototype.ignorecase属性包含一个布尔值,用于判断是否为正则表达式设置了"i"标志。这不是一个函数,也不为表达式或字符串提供任何操作操作。
请参阅:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/regexp/ignorecase
您可能需要考虑调用类似于String.prototype.toLowerCase()函数的函数,该函数将字符串转换为小写。
编辑:如果有帮助的话,我想您可以将tolowercase()放在split()之前,因为tolowercase()是字符串的函数,而不是数组的函数。除非您以后想对每个字符串分别调用它,否则在一个地方调用它可能是最快的,如下所示:
1 2 3 4 5
| chunk.replace(/^\s*[
]/gm,"").toLowerCase().split(/\s+/).forEach(function (s) {
// function here
}); |
只需接受输入并将其强制到所有使用String.toLowerCase()或String.toUpperCase()的小写或大写,然后将其与相同的大小写字符串进行比较:
1 2 3
| console.log("test" ==="Test"); // false
console.log("test" ==="Test".toLowerCase()); // true
console.log("TeSt".toUpperCase() ==="Test".toUpperCase()); // true |
- 建议使用接线盒
- @为什么?我在JS世界已经20多年了,从来没听说过。最重要的是,字符串的大小写是一样的——不管它是上还是下。
- @mplungjan,推荐谁?
- 回答这里,也许(?)这涉及到国际化,但也回答了"为什么"的问题,特别是关于人物"往返"的原始问题的第二条评论。
- docs.microsoft.com/en-GB/VisualStudio/code quality/…
- @斯科特马尔库斯确信,你可以用.fromCharCode()编写一个快速测试来尝试所有16位代码点,其中一些代码点会失败地返回小写和大写。这对我来说是个新闻。
- @你介意分享一下那个测试吗?
- @zfrisch它只是一个简单的for循环,从0到65535(可能应该在那之前停止),调用String.fromCharCode(),并检查是否进入小写和返回大写会产生与直接进入大写相同的字符串。
- @尖哦,我明白了!我会自己动手检查的。看起来很奇怪,但这是一个有趣的讨论点。
- @尖刻的谢谢。每天学习新东西!