gpt4 book ai didi

regex - HTML5 中正则表达式中的括号是必要的吗?

转载 作者:行者123 更新时间:2023-11-27 23:29:15 25 4
gpt4 key购买 nike

以下片段来自一本关于 HTML5 的书:

<label for="zip">US Zip code</label>
<input id="zip" name="zip" pattern="[\d]{5}(-[\d]{4})">

我认为 [\d]{5}(-[\d]{4}) 中的 Parathensis 是多余的,这意味着:[\d]{5}(-[\d]{4}) 等于 [\d]{5}-[\d]{4}

是吗?

最佳答案

首先,您的模式中的字符类相当多余,并且可能会因误解字符类的工作方式而导致进一步的问题。

经验法则 是如果您不需要,就不要使用某些东西。因此,将模式“简化”为 \d{5}(-\d{4})

像您的模式中那样的一对非转义括号用于 group and capture (将子匹配放入为每个此类组分配的内存缓冲区中)。

因此,\d{5}(-\d{4}) 匹配字符串开头的 5 位数字(因为模式属性正则表达式在两边都使用 ^ (?:)$ 默认情况下),然后匹配字符串末尾的连字符和 4 位数字并将其放入内存缓冲区 #1 ,从而创建一个组可以用 backreference 引用.

模式内的反向引用使用 \n 语法指定,其中 n 是捕获组 ID。因此,为了匹配先前以相同模式匹配的文本,我们可以使用这些反向引用。当您需要检查字符串中的重复值时,它很有用。比如,您想验证以相同的 2 位数字开头和结尾的字符串:pattern="(\d{2}).*?\1":

<form>
<input pattern="(\d{2}).*?\1" message="2 digits at the start and end should be identical!" />
<input type="submit"/>
</form>

此外,您可以利用分组(捕获(...) 和非捕获(?:...)) 来匹配特定序列的多次出现。比如说,您想匹配 2 个 abc + 3 位数字序列。那么您将使用 (abc\d{3}){2}

关于regex - HTML5 中正则表达式中的括号是必要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749672/

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