我使用RegExr构建了此表达式,并且在测试时可以在其中正常运行。应该匹配不是字母,数字或-
的任何内容。
/[^0-9a-zA-Z-]*/g
所以我想用它来测试javascript中的字符串。如果发现不是字母,数字或-
的内容,则应返回true,否则返回false。
我说的测试在这里,您可以看到正确的匹配项:https://regexr.com/40ot1
.test()
test()方法执行搜索以查找常规规则之间的匹配项 表达式和指定的字符串。返回true或false。
const expression = /[^0-9a-zA-Z_]*/g;
const str1 = 'abc778defg'; //Expected false
const str2 = 'ab779cde fgh&$-'; //Expected true
const str3 = '123vFFFdd-'; //Expected false
console.log(expression.test(str1)); //output true?
console.log(expression.test(str2)); //output true
console.log(expression.test(str3)); //output true?
我如何按预期进行这项工作?
编辑:这个问题不是重复的,因为我不是在问如何match a whole value
,我已经使用RegExr发现了这一点。我问为什么我的查询在其他地方无法正常工作。
答案 0 :(得分:1)
您正在用*
重复字符集。这意味着正则表达式将尝试匹配零个或多个这些字符。但是所有字符串都可能与零字符匹配(零宽度匹配),例如,在字符串的开头。
删除中继器,以便仅测试字符串中任何位置的那些字符之一。另外,如果要测试破折号而不是下划线,请使用/[^0-9a-zA-Z_]/
(将/[^0-9a-zA-Z-]/
更改为_
)而不是-
,它简化为{{ 1}}-/[^\da-z-]/i
是数字字符,因此最好使用0-9
,当可以使用\d
标志代替时,最好不要重复a-zA-Z
。>
此外,在使用i
时,不需要test
全局标志:
/g
答案 1 :(得分:0)
您将const expression = /[^\da-z-]/i;
const str1 = 'abc778defg'; //Expected false
const str2 = 'ab779cde fgh&$-'; //Expected true
const str3 = '123vfdd-'; //Expected false
console.log(expression.test(str1));
console.log(expression.test(str2));
console.log(expression.test(str3));
(否定)与*
(最少)一起使用
您可以提出一个问题:是否存在至少0个看起来不像^
的字符,答案是肯定的