检查字符串是否与 JS 中的正则表达式匹配
我想使用 JavaScript(我也可以使用 jQuery)来检查字符串是否与正则表达式 ^([a-z0-9]{5,})$
匹配,并获取 true
或 false
结果。
match()
似乎检查字符串的一部分是否与正则表达式匹配,而不是整个字符串。它能解决问题吗?我可以调整它来解决问题吗?如何?
I want to use JavaScript (I can also use jQuery) to do check whether a string matches the regex ^([a-z0-9]{5,})$
, and get a true
or false
result.
match()
seems to check whether part of a string matches a regex, not the whole thing. Does it solve the problem? Can I adapt it to solve the problem? How?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
使用
regex.test()
如果您想要的只是布尔结果:
...并且您可以从正则表达式中删除
()
因为您不需要捕获。Use
regex.test()
if all you want is a boolean result:...and you could remove the
()
from your regexp since you've no need for a capture.使用
test()
方法:Use
test()
method :您也可以使用
match()
:但是
test()
似乎更快,因为您可以阅读 这里。match()
和test()
之间的重要区别:match()
仅适用于字符串,但test()
也适用于整数。You can use
match()
as well:But
test()
seems to be faster as you can read here.Important difference between
match()
andtest()
:match()
works only with strings, buttest()
works also with integers.如果您只想知道字符串是否与正则表达式匹配,请使用
/youregexp/.test(yourString)
。Use
/youregexp/.test(yourString)
if you only want to know whether your string matches the regexp.下面是一个查找某些 HTML 标签的示例,因此很明显
/someregex/.test()
返回一个布尔值:如果您想测试整个字符串的精确匹配,请记住以
^
表示字符串的开头,以$
表示结尾。例子:
Here's an example that looks for certain HTML tags so it's clear that
/someregex/.test()
returns a boolean:Remember to indicate
^
for beginning of the string and$
for the end, if you want to test the exact match of entire string.Example:
尝试
try
我建议使用execute方法,如果不存在匹配则返回null,否则它返回一个有用的对象。
I would recommend using the execute method which returns null if no match exists otherwise it returns a helpful object.
你可以试试这个,它对我有用。
You can try this, it works for me.
请尝试一下这朵花:
please try this flower:
如果您不想在正则表达式周围使用 ^ 和 $ (我有这样的用例),您可以执行类似的操作
If you don't want ^ and $ around the regex (I had such a usecase) you can do something like
如果查询字符串不存在于 URL 中,则以下解决方案将在 URL 中添加参数,如果该参数已存在,则它将更新。
If the query string does not present in the URL then the below solution will work to add the param in the URL, if it already exists then it will update.
调用 RegExp.prototype.test() 可能是正确的,但有一些注意事项:
/g
它实际上存储来自 MDN 的状态:这意味着,对于第一点,您需要使用锚点,其中
^
表示 a 的开始字符串,$
表示结束。因此,正则表达式匹配完整的字符串“Cat”&没有其他的会是:/^Cat$/
其次,您不能在同一个全局正则表达式上重用
regex.test(str)
用于此目的的字符串,因为它的含义随着时间的推移而变化。例如(并注意失败,尽管使用了不同的字符串实例)Calling
RegExp.prototype.test()
is probably correct, but has a couple caveats:/g
it actually stores state, from the MDN:This means, for the first point, you need to use anchors, where
^
indicates the start of a string, and$
indicates it's end. So a regex matching the full string "Cat" & nothing else would be:/^Cat$/
And secondly, you cannot reuse
regex.test(str)
with a global regex on the same string for this purpose, as it's meaning changes over time. E.g. (and note the failure, despite using different instances of string)是的,你可以。如果您选择,则不需要
^
和$
。这个想法很简单:
.match()
返回一个“匹配”数组。如果第一个元素(即整个匹配,或$0
)等于字符串,那么我们就有一个完全匹配。尝试一下:
请注意,这不适用于
g
正则表达式,因为此标志会导致.match()
在至少有一个匹配项的情况下始终返回普通数组。但是,您可以使用
RegExp #exec()
相反:尝试一下:
单线:
Yes, you can.
^
and$
are not needed if you so choose.The idea is simple:
.match()
returns a "match" array. If the first element (i.e. the whole match, or$0
) equals to the string, then we have a full match.Try it:
Note that this does not work with
g
regexes, as this flag causes.match()
to always return a normal array if there is at least one match.You can, however, use
RegExp#exec()
instead:Try it:
One-liner: