在变量中无法正确评估JavaScript值,但可以作为字符串正常工作

时间:2019-12-23 22:14:40

标签: javascript regex

我不确定为什么仅在变量而不是字符串中此评估会有所不同。我看不出任何逻辑。

const numRegex = /hundred|thousand|million|billion|trillion/ig;

const isNum = string => numRegex.test(string)


var word = 'hundred';
console.log('isNum with string:', isNum('hundred')); // true
console.log('isNum with variable:', isNum(word));    // false
console.log('words are equal:', word === 'hundred'); // true

1 个答案:

答案 0 :(得分:3)

isNum在同一字符串上第二次调用时返回false。更改顺序,然后看到相同的内容:

const numRegex = /hundred|thousand|million|billion|trillion/ig;

const isNum = string => numRegex.test(string)


var word = 'hundred';
console.log('isNum with variable:', isNum(word));    // true
console.log('isNum with string:', isNum('hundred')); // false
console.log('words are equal:', word === 'hundred'); // true

g标志会记住最后一场比赛的位置。删除它以解决问题:

const numRegex = /hundred|thousand|million|billion|trillion/i;

Mozilla talks more about this

  

sticky flag表示正则表达式通过尝试从RegExp.prototype.lastIndex开始的匹配来对目标字符串执行粘性匹配。