gpt4 book ai didi

javascript - 匹配类似 Excel 的引用单元格的正则表达式

转载 作者:行者123 更新时间:2023-11-30 07:21:57 26 4
gpt4 key购买 nike

我正在尝试制作一个正则表达式,该正则表达式仅匹配 A-Z(含)范围内的字母,后跟 0-100(含)之间的数字。如果我的正则表达式之前有任何数字,我不希望它匹配。例如:5A1 不应匹配,因为它前面有数字 5,即使 A1 在字符串中也是如此。同样,我不希望它匹配该范围之后的任何数值,例如 A10000(不应匹配,因为 1000 在 100 之外)。

下面演示了我要匹配的内容:

A34A1                // no match
5A1 // no match
2.344A1 // no match
A1001 // no match
A1 // match A1
A10 // match A10
A100 // match A100
SUM(A1:A2) // match A1 and A2
SUM(A1:A2, 5A1, A3) // match A1,A2, A3

我一直在尝试这些正则表达式,但不确定如何排除该范围之前或之后的任何数字:

/[A-Z]{1,2}[1-9]{0,3}/g

/([^0-9])[A-Z]{1,2}[0-9]{1,3}/g

最佳答案

使用这个正则表达式:

/\b[A-Z]([0-9]{1,2}|100)\b/

或更简单的等价物:

/\b[A-Z]([0-9][0-9]?|100)\b/

或等效的更短数字元字符:

/\b[A-Z](\d\d?|100)\b/

在正则表达式的开头和结尾使用 \b 元字符,您可以消除任何不需要的前面或结尾字符。 [A-Z] 字符类仅包含一个大写字母来开始单元格引用。数字部分由 0-99100 交替处理,其中 0-99 部分由一到两位数字字符处理类。代替显式 [0-9] 字符类,\d 元字符也可以正常工作,如果这是您的偏好的话。

这是一个示例 Ruby 程序(类似于 Javascript 的正则表达式风格)以显示其工作情况:

data = [
[ "A34A1", false ],
[ "5A1", false ],
[ "2.344A1", false ],
[ "A1001", false ],
[ "A1", true ],
[ "A10", true ],
[ "A100", true ],
[ "SUM(A1:A2)", true ],
[ "SUM(A1:A2, 5A1, A3)", true ]
]

data.each do |pair|
puts "#{pair[1] == !(pair[0] =~ /\b[A-Z]([0-9]{1,2}|100)\b/).nil? ? 'Pass' : 'Fail'}: '#{pair[0]}'"
end

data数组中,每一对的第二个元素是一个 bool 值,它决定了测试单元格引用是否应该匹配。

运行这个程序的输出显示所有测试都通过了:

> ruby regex_test.rb
Pass: 'A34A1'
Pass: '5A1'
Pass: '2.344A1'
Pass: 'A1001'
Pass: 'A1'
Pass: 'A10'
Pass: 'A100'
Pass: 'SUM(A1:A2)'
Pass: 'SUM(A1:A2, 5A1, A3)'

关于javascript - 匹配类似 Excel 的引用单元格的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128114/

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