gpt4 book ai didi

javascript - 为什么javascript字符串匹配包含undefined

转载 作者:数据小太阳 更新时间:2023-10-29 04:25:39 24 4
gpt4 key购买 nike

我有一个或多或少像这样使用的正则表达式:

'(801) 555-1234'.match(/^(1[-. ]?)?\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/)

出于某种原因,这返回

["(801) 555-1234", undefined]

如果我将全局标志添加到正则表达式(例如 ...{4}$/g),未定义的值就会消失,我得到

["(801) 555-1234"]

如果没有必要,我宁愿不使用 g 标志(在我看来它不是,因为正则表达式以 ^ 开头并以 $ 结尾)。

附言出于匹配电话号码的目的而忽略正则表达式的质量。它可能不理想,但来 self 正在维护的代码。大多数情况下,我对 ^...$ 以及标志和未定义值的存在/不存在感兴趣。

为什么 undefined 出现了,为什么标志会有所不同?

最佳答案

这是一组:

/^<b>(1[-. ]?)</b>?

.match(没有 /g 标志)和 .exec 返回组作为数组的一部分。如果组不匹配,则其值设置为 undefined

获取第一个元素:

'(801) 555-1234'.match(/^(1[-. ]?)?\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/)[0]

如果出于某种原因你真的、真的、真的想要单元素数组,你可以让它成为非捕获的:

/^(<b>?:</b>1[-. ]?)?

但是,此时,您将此正则表达式锚定到字符串的开头和结尾,并且不会提取任何信息。在那种情况下,您似乎真的在寻找 RegExp.prototype.test:

var PHONE_NUMBER = /^(1[-. ]?)?\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/;
var isValid = PHONE_NUMBER.test('(801) 555-1234');

关于javascript - 为什么javascript字符串匹配包含undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21026134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com