Как мы можем кодировать без учета регистра в JavaScript? - PullRequest
0 голосов
/ 09 октября 2018

В моем проекте мне нужно позаботиться о том, чтобы регистр не учитывался, и я не знаю, как я могу написать что-то подобное в 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, но он не работает, не могли бы вы объяснить, почему, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Просто возьмите ввод и переведите его в нижний или верхний регистр с помощью String.toLowerCase() или String.toUpperCase(), а затем сравните его с той же строкой:

console.log("test" === "Test"); // false
console.log("test" === "Test".toLowerCase()); // true
console.log("TeSt".toUpperCase() === "Test".toUpperCase()); // true
0 голосов
/ 09 октября 2018

Свойство RegExp.prototype.ignorecase содержит логическое значение, определяющее, установлен ли флаг "i" для регулярного выражения.Это не функция и не предоставляет каких-либо манипуляций с выражением или строкой.

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

То, что вы, возможно, захотите сделать, это вызвать что-то вроде String.prototype.toLowerCase()функция, которая преобразует строку в нижний регистр.

Редактировать: если это поможет, я думаю, вы могли бы поместить toLowerCase () перед split (), так как toLowerCase () является функцией String, а не функцией массива,И если позже вы не захотите вызывать его отдельно для каждой строки, может быть быстрее всего сделать это в одном месте, например, так:

chunk.replace(/^\s*[\r\n]/gm,"").toLowerCase().split(/\s+/).forEach(function (s) {
   // function here
});
0 голосов
/ 09 октября 2018

Просто используйте String.prototype.toLowerCase на всех ваших строках на входе, чтобы при сравнении их можно было представить только один способ.

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