在 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 将返回一个数组,而!anyArrayfalse,所以!!anyArraytrue。如果不匹配,match 返回null!nulltrue,所以!!nullfalse。没有任何潜伏的 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 匹配精确的子字符串

在 RegEx 中,表达式 \X 匹配啥?

如何在 C# Regex 中使用lookbehind 来跳过重复前缀模式的匹配?

C#Regex使用匹配值替换

RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +