Nodejs indexOf具体数
Nodejs indexOf specific number
此代码:
var t = "test 55";
t.indexOf("5") !== -1
输出真,
但是这段代码:
var t = "test 55";
t.indexOf("5") !== -1
也输出true,
如何让它只输出 true,当它的数字完全相同时,像这样:
var t = "test 55";
t.indexOf("5") !== -1
输出:假,
var t = "test 5";
t.indexOf("5") !== -1
输出为真。
双引号或单引号中的值被 JavaScript 视为字符串类型。因此 indexOf 实际上在做的是在字符串 ("55") 中寻找子字符串 ("5")。
我不确定你为什么要尝试使用 indexOf 来比较数字,你不能只使用:
var t = "55";
t == 5 //false
t == "55" // true
t == "5" // false
请注意,我使用了 == 而不是 ===。使用 == 会将值转换为相同类型(在 t = "55" 为字符串的情况下)并比较它们。
编辑
既然op明确了t值既包含数字又包含字母,那么为了进行比较,还需要额外的逻辑。
- 从字符串中提取数字。
- 将其与提供的数字进行比较。
可以通过函数实现:
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 参数中找到的第一个数字进行比较。
.indexOf()
不适合为所欲为。您可以使用 .search()
(因为您问题的原始版本有标签 regex)。
你没有明确指出 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)
此代码:
var t = "test 55";
t.indexOf("5") !== -1
输出真,
但是这段代码:
var t = "test 55";
t.indexOf("5") !== -1
也输出true,
如何让它只输出 true,当它的数字完全相同时,像这样:
var t = "test 55";
t.indexOf("5") !== -1
输出:假,
var t = "test 5";
t.indexOf("5") !== -1
输出为真。
双引号或单引号中的值被 JavaScript 视为字符串类型。因此 indexOf 实际上在做的是在字符串 ("55") 中寻找子字符串 ("5")。
我不确定你为什么要尝试使用 indexOf 来比较数字,你不能只使用:
var t = "55";
t == 5 //false
t == "55" // true
t == "5" // false
请注意,我使用了 == 而不是 ===。使用 == 会将值转换为相同类型(在 t = "55" 为字符串的情况下)并比较它们。
编辑
既然op明确了t值既包含数字又包含字母,那么为了进行比较,还需要额外的逻辑。
- 从字符串中提取数字。
- 将其与提供的数字进行比较。
可以通过函数实现:
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 参数中找到的第一个数字进行比较。
.indexOf()
不适合为所欲为。您可以使用 .search()
(因为您问题的原始版本有标签 regex)。
你没有明确指出 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)