在 RegEx 匹配中使用双 bang (!!) 是不是安全? [复制]
Posted
技术标签:
【中文标题】在 RegEx 匹配中使用双 bang (!!) 是不是安全? [复制]【英文标题】:Is it safe to use double bang (!!) with a RegEx match? [duplicate]在 RegEx 匹配中使用双 bang (!!) 是否安全? [复制] 【发布时间】:2021-01-23 15:58:14 【问题描述】:假设我有以下代码:
const isArrayField = type => !!type.match(/^Array\[\w+\]$/);
const type = 'Array[IncidentRole]';
console.log(isArrayField(type));
我只需要知道字符串是否与正则表达式匹配。我不需要比赛。这种情况下,使用安全吗!!强制isArrayField
返回一个布尔值?如果不是,为什么?
【问题讨论】:
最好使用regex.test(str)
【参考方案1】:
这是安全的,是的。如果匹配,match
将返回一个数组,而!anyArray
是false
,所以!!anyArray
是true
。如果不匹配,match
返回null
,!null
是true
,所以!!null
是false
。没有任何潜伏的 TypeError 等待发生或类似情况。 :-)
但是有一个更好的答案:正则表达式上的 test
函数,它返回一个布尔值:
const isArrayField = type => /^Array\[\w+\]$/.test(type);
// −−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^^^^^
const type = 'Array[IncidentRole]';
console.log(isArrayField(type));
【讨论】:
太棒了。我不知道test
是怎么溜走的。非常感谢!以上是关于在 RegEx 匹配中使用双 bang (!!) 是不是安全? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 C++Builder 中使用 boost::regex 提取双引号
在 C++ 中使用 std::regex 匹配精确的子字符串