gpt4 book ai didi

javascript - 正则表达式,提取组

转载 作者:行者123 更新时间:2023-11-29 22:12:20 29 4
gpt4 key购买 nike

我想验证一个值是否检查以下格式之一:..A, B.., A..B

并检索值:(null, A) , (B, null) , (A, B)

这是我的代码:

var regexRange = new RegExp("^([a-zA-Z0-9]+)\.\.([a-zA-Z0-9]*)$|^[a-zA-Z0-9]*\.\.([a-zA-Z0-9]+)$");

function getRangeValues(value) {
var from = null;
var to = null;
var matches = regexRange.exec(value);
if (matches !== null) {
if (matches[3] !== undefined) {
to = matches[3];
}
else if(matches[1]!==undefined && matches[1]!=='') {
from = matches[1];
if (matches[2] !== undefined && matches[2] !== '') {
to = matches[2];
}
}
}
var range = { From: from, To: to };
return range;
}

Value: 1233 => From=12, To=null

我不明白为什么我会得到这种不正确的行为,对于其他用例它似乎有效。

最佳答案

我认为问题在于您没有转义从中创建正则表达式的字符串文字中的反斜杠。在字符串文字中,如果您希望生成的正则表达式具有 \.\.,则需要 \\.\\.:

var regexRange = new RegExp("^([a-zA-Z0-9]+)\\.\\.([a-zA-Z0-9]*)$|^[a-zA-Z0-9]*\\.\\.([a-zA-Z0-9]+)$");

如果字符串中的单个反斜杠后面没有需要转义的字符,那么它们将被忽略,因此您正在创建一个包含 .. 的正则表达式,它匹配任意两个字符。更容易使用正则表达式文字:

var regexRange = /^([a-zA-Z0-9]+)\.\.([a-zA-Z0-9]*)$|^[a-zA-Z0-9]*\.\.([a-zA-Z0-9]+)$/;

(当然可能还有其他问题,但那个问题突然出现在我面前。)

关于javascript - 正则表达式,提取组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17427609/

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