希望是一个简单的!
我一直试图让这个工作几个小时但是没有运气,因为我对regexp很新,我可能会错过一些非常明显的东西,希望有人能指出我正确的方向。我想要匹配的模式如下: -
至少一个或多个数字+“##”+至少一个或多个数字+“##”+至少一个或多个数字
所以有效组合的几个例子是: - 1 ## 2 ## 3 123#123#123 0 ## 0 ## 0
会有一些无效的组合 一个## b ##Ç 1 ## ## 1
我有以下正则表达式: -
[\d+]/#/#[\d+]/#/#[\d+]
我正在使用它(请注意字符串中的双斜线): -
var patt = new RegExp("[\\d+]/#/#[\\d+]/#/#[\\d+]");
if(newFieldValue!=patt){newFieldValue=="no match"}
我也试过这些但仍然没有: -
if(!patt.text(newFieldValue)){newFieldValue==""}
if(patt.text(newFieldValue)){}else{newFieldValue==""}
但我没有尝试匹配,我在哪里错了?
感激不尽的任何指示,欢呼!
答案 0 :(得分:5)
1)我看不出有任何理由在你的案例中使用RegExp
构造函数而不是RegExp文字。 (前者主要用于模式需要的动态,即由变量贡献。)
2)如果其中只有一种类型的字符,则不需要字符类(因此\d+
不是[\d+]
3)您实际上没有根据输入检查模式。您不通过创建它的实例并使用==
来应用RegEx;您需要使用test()
或match()
来查看是否匹配(前者如果您只想检查,而不是捕获)
4)您要==
指定(=
)
if (!/\d+##\d+##\d+/.test(newFieldValue)) newFieldValue = "no match";
答案 1 :(得分:2)
您将+
放在括号内,因此您匹配的是一个数字或+
的单个字符,而不是数字序列。我也不明白你为什么在每个/
之前有#
,你的描述没有提到任何关于这个角色的内容。
使用:
var patt = /\d+##\d+##\d+/;
答案 2 :(得分:1)
您应该使用pat regex的测试方法
if (!patt.test(newFieldValue)){ newFieldValue=="no match"; }
一旦有了有效的正则表达式。
答案 3 :(得分:1)
试试这个正则表达式:
^(?:\d+##){2}\d+$
演示: http://regex101.com/r/mE8aG7
使用以下正则表达式
[\ d +] /#/#[\ d +] /#/#[\ d +]
你只会匹配以下内容:
+/#/#5/#/#+
+/#/#+/#/#+
0/#/#0/#/#0
因为正则表达式引擎在下面的架构中看到它:
答案 4 :(得分:0)
类似的东西:
((-\s)?\d+##)+\d+