Javascript:正则表达式字符串和正则表达式的区别
我必须将给定的变量放入正则表达式中。当我使用硬编码数据时,它就工作了。这是我的代码Javascript:正则表达式字符串和正则表达式的区别,javascript,regex,string-concatenation,Javascript,Regex,String Concatenation,我必须将给定的变量放入正则表达式中。当我使用硬编码数据时,它就工作了。这是我的代码 /^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!ccarn).)*$/ var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/'); 这应该(并且确实)查找区分
/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!ccarn).)*$/
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
这应该(并且确实)查找区分大小写的单词(本例中为密码),至少有一个大写字母和一个小写字母,以及一个数字或符号。但是,它不能包含“ccarn”一词。再次当我把它作为我的正则表达式放进去的时候,一切都正常了。当我试图把它转换成一个字符串来传递时,它就不起作用了。这是我的代码
/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!ccarn).)*$/
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
我觉得我可能只是在翻译/转换过程中遗漏了一些东西,但似乎无法做到正确。TIA当您使用
new RegExp()
构造函数从字符串构造正则表达式时,不应在字符串中包含前导和尾随的/
。/…/
表单仅在指定正则表达式文本时使用,而您在这里不这样做
当你这样做的时候,比如说,var r=newregexp('/foo/')
,你实际得到的正则表达式相当于做var r=/\/foo\/
,这显然不是你想要的。因此,您的构造函数实际上应该如下所示:
var regex = new RegExp('^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$');
// ↑↑ ↑↑
// no "/" at the locations pointed to above
您可能还需要将反斜杠加倍(因为反斜杠是字符串中的转义字符,而不是正则表达式文本中的转义字符)。因此,当您使用
新RegExp()时,[0-9@$-/:-?{-~!“^ `\[\]
需要变成[0-9@$-/:-?{-~!”^ `\[\]
构造函数要从字符串构造正则表达式,您不应该在字符串中包含前导和尾随的/
。/…/
表单仅在指定正则表达式文字时使用,这不是您在这里要做的
当您这样做时,比如说,var r=new RegExp('/foo/')
,您实际得到的正则表达式相当于执行var r=/\/foo\/
,这显然不是您想要的。因此,您的构造函数实际上应该如下所示:
var regex = new RegExp('^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$');
// ↑↑ ↑↑
// no "/" at the locations pointed to above
您可能还需要将反斜杠加倍(因为反斜杠是字符串中的转义字符,而不是正则表达式中的文字)。因此,
[0-9@$-/:-?{-~!“^u`\[\]
需要变成[0-9@\$-/:-?{-~!^u`\[\]
在做任何其他事情之前,请阅读正则表达式教程
错误:
(?=.*[A-z])+
(这就像重复一些空的、零次或多次的内容。请注意,如果您编写这样的内容,正则表达式引擎将提出抗议。)var pattern=new RegExp(“…
”)时,不需要添加分隔符。需要放置双反斜杠,而不是简单的反斜杠在做任何其他事情之前,请阅读regex教程 错误:
(?=.*[A-z])+
(这就像重复一些空的、零次或多次的内容。请注意,如果您编写这样的内容,正则表达式引擎将提出抗议。)var pattern=new RegExp(“…
”)时,不需要添加分隔符。需要放置双反斜杠,而不是简单的反斜杠如果仔细观察,“/”字符在引号中被分隔,因此本质上
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
正则表达式如下所示
/\/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-\/:-?{-~!"^_`[]])+((?!ccarn).)*$\//
正确的方法是从正则表达式中删除“/”字符,它应该可以工作
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
上述的输出将是
/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-\/:-?{-~!"^_`[]])+((?!ccarn).)*$/
这正是你需要的
如果仔细看一下,“/”字符在引号中被分隔,希望它能有所帮助
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
正则表达式如下所示
/\/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-\/:-?{-~!"^_`[]])+((?!ccarn).)*$\//
正确的方法是从正则表达式中删除“/”字符,它应该可以工作
var regex = new RegExp('/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-/:-?{-~!"^_`\[\]])+((?!' + $scope.username + ').)*$/');
上述的输出将是
/^(?=.*[a-z])+(?=.*[A-Z])+(?=.*[0-9@#$-\/:-?{-~!"^_`[]])+((?!ccarn).)*$/
这正是你需要的
希望它有帮助Unrelated,但就个人而言,如果只是检查正则表达式之外的字符串
ccarn
。甚至可以用一种不太复杂的方式检查有问题的字符类的存在。我非常喜欢正则表达式,但有时它们很难思考和排除故障。Unrelated,但就个人而言,如果只是检查strin对于正则表达式之外的ccarn
。甚至可以用一种不太复杂的方式检查有问题的字符类的存在。我非常喜欢正则表达式,但有时它们很难思考和排除故障。