gpt4 book ai didi

用于匹配英尺英寸测量问题的 Javascript 正则表达式

转载 作者:行者123 更新时间:2023-11-29 15:34:57 24 4
gpt4 key购买 nike

我是正则表达式的新手,我正在尝试创建一个正则表达式来匹配一个字符串,该字符串包含以英尺和英寸表示的测量值,并可能以英寸为单位的小数值。到目前为止,我有以下表达式:

var rex =/\s*(\d+)?\s*(?:'|ft|ft.|feet)?\s*-?\s*(\d+)?\s*(\d+)?\/?(\d+)?\s*(?:''|"|in|in.|inches)?/

为了尽可能灵活,我将所有捕获设为可选,以将 1ft5'' 等测量值设置为有效输入数据。

var mstring = '5in';
var match = rex.exec(mstring);

问题是当应用正则表达式时,例如 5in 我得到的捕获是 match[1]='5' 而其他三个值(match[2]match[3]match[4])保持未定义

有没有办法让捕获的值按照它们定义的顺序出现?在上述情况下,match[2]="5in"match[1]match[3]match[4] 保持未定义

最佳答案

诀窍在于在可选部分周围使用非捕获组并在这些组内使用强制性子模式:

var rex =/(?:\s*(\d+)\s*(?:feet|ft\.|ft|'))?(?:\s*-\s*(\d+))?(?:\s*(\d+)\/)?(?:(\d+)\s*(?:inches|in\.|in|''|"))?/

在第 1 组中,我将 (?:feet|ft\.|ft|') 设置为强制性的,在第 2 组中,它是连字符 -,在第3、斜杠/,在第4组中,是(?:inches|in\.|in|''|")交替。

参见 demo

编辑:

我现在不明白其中的逻辑,但是如果你想让 5in 中的 5 出现在第二组,使用

(?:\s*(\d+)\s*(?:feet|ft\.|ft|'))?(?:\s*-?\s*(\d+))?(?:\s*(\d+)\/)?(?:(\d+)\s*(?:inches|in\.|in|''|"))?
^

参见 Demo 2

关于用于匹配英尺英寸测量问题的 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350514/

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