Индекс узла определенного номера - PullRequest
0 голосов
/ 20 ноября 2018

Этот код:

var t = "test 55";
t.indexOf("5") !== -1

Вывод true,

Но этот код:

var t = "test 55";
t.indexOf("5") !== -1

Также вывод true,

Как мнесделать так, чтобы он выводил только значение true, когда его число совпадает, вот так:

var t = "test 55";
t.indexOf("5") !== -1

Вывод: false,

var t = "test 5";
t.indexOf("5") !== -1

Вывод true.


Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

.indexOf() не подходит, чтобы делать то, что вы хотите.Вы можете использовать .search() (тем более что в исходной версии вашего вопроса был тег ).
Вы не указали явно, что должно дать 5.5, поэтому я дамдва выражения - первое, более простое /\b5\b/ соответствует ему, а второе, более сложное /(^|[^.])\b5\b(?!\.)/ не соответствует.Исключение десятичной запятой стало асимметричным до и после 5, потому что я отказался от использования утверждения с задним числом, которое поддерживается только начиная с ECMAScript 2018 года.

t = ["5", "test 5", "test 55", "test 5.5"]
console.log('with regex '+/\b5\b/)
for (i in t)
  console.log(t[i], t[i].search(/\b5\b/) !== -1)
console.log('with regex '+/(^|[^.])\b5\b(?!\.)/)
for (i in t)
  console.log(t[i], t[i].search(/(^|[^.])\b5\b(?!\.)/) !== -1)
0 голосов
/ 20 ноября 2018

Значение в двойных или одинарных кавычках обрабатывается JavaScript как тип String.Поэтому на самом деле indexOf ищет подстроку («5») внутри строки («55»).

Я не уверен, почему вы пытаетесь использовать indexOf для сравнения чисел, можетевы просто используете:

var t = "55";
t == 5 //false
t == "55" // true
t == "5" // false

Обратите внимание, что я использовал ==, а не ===.Использование == преобразует значения в одинаковые типы (в случае t = "55" в строку) и сравнивает их.

РЕДАКТИРОВАТЬ

Поскольку операционная система пояснила, что tзначение содержит как цифры, так и буквы, затем для сравнения необходима дополнительная логика.

  1. Извлечение числа из строки.
  2. Сравните его с предоставленным числом.

Вы можете достичь этого, используя функцию:

function compare(number, stringWithNumber) {
  // slice string with number to get a string starting with a number
  const stringStartingWithNumber = stringWithNumber.slice(stringWithNumber.search(/\d/));
  return parseFloat(stringStartingWithNumber) == number; // parseFloat removes the rest of the string and parses found number as float
}

Затем:

compare("5", "55") // false
compare("5", "5") // true
compare("5", "sometext 55") // false
compare("5", "sometext 5") // true

Обратите внимание, что функция будет сравнивать предоставленный номер только с первым номеромнаходит в аргументе stringWithNumber.

...