我有以下正则表达式:
\b((?:12345)(\d{1,4})1)\b
我正在尝试做的是使数字的结尾必须始终为1,无论数字的范围或数字选择如何。我很难搞清楚如何绕过像 12345 111 1 这样的例子,(注意:我已将分组的数字分开以避免混淆)。我怎样才能使正则表达式能够告诉范围组中的数字除了组后面的'1'?谢谢你的帮助。
更新:
没有特定的编程语言,正则表达式存储在数据库中,并被Javascript拉出并用作参考检查。
更新:
澄清的一些例子:
- 用户输入 1234511 ,正则表达式引擎如何知道这是否有效?即引擎如何知道它是否有效 12345 1 1 (一个'1'带有所需的结尾'1')或无效 12345 11 (1的组是正则表达式(\d{1,4})
部分的一部分,但字符串末尾不包含“1”
- 用户输入 1234510111 ,这将有效。 12345 1011 1 ('1011'是小组(\d{1,4})
的一部分)并在最后包含1。
要点:
正则表达式必须识别1-4范围内的任何数字组,但字符串必须始终以1
结尾答案 0 :(得分:3)
正则表达式已将这些数字捕获到捕获组中:
var str = "123459991";
var match = str.match(/\b((?:12345)(\d{1,4})1)\b/);
alert(match[2]); // 999
捕获组是你的正则表达式的括号。
matches[0]
)((?:12345)(\d{1,4})1)
,这是整个匹配(不太有用)。(\d{1,4})
,这是您要查找的数字。12345
不被捕获到某个群组 - (?...)
是非捕获群组,并且未包含在结果中的标记。同样,这不会增加太多,你可以简单地写12345
。您可以将正则表达式简化为/\b12345(\d{1,4})1\b/
,而不会丢失任何信息。
如何匹配:
通常,记住正则表达式引擎尝试很难匹配您的输入非常重要。具体来说,它会尝试所有组合(以及所有可能的起始位置),直到它可以将模式与文本匹配为止
例如,如果文本是1234599991,则匹配很容易:
下一个例子:123459991
答案 1 :(得分:0)
看看this看看它是否达到了你想要的效果。
var regex = /^(([0-9]{5})([0-9]{1,4})(1))$/i;
var match1 = "1234511111".match(regex);
var match2 = "123451111".match(regex);
var match3 = "12345111".match(regex);
var match4 = "1234511".match(regex);
var match5 = "123451".match(regex);
console.log(match1);
console.log(match2);
console.log(match3);
console.log(match4);
console.log(match5);