简单的正则表达式模式与转义字符匹配

时间:2014-02-11 09:52:43

标签: javascript regex

希望是一个简单的!

我一直试图让这个工作几个小时但是没有运气,因为我对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==""}

但我没有尝试匹配,我在哪里错了?

感激不尽的任何指示,欢呼!

5 个答案:

答案 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+$

Regular expression visualization

演示: http://regex101.com/r/mE8aG7

使用以下正则表达式

  

[\ d +] /#/#[\ d +] /#/#[\ d +]

你只会匹配以下内容:

  • +/#/#5/#/#+
  • +/#/#+/#/#+
  • 0/#/#0/#/#0

因为正则表达式引擎在下面的架构中看到它:

Regular expression visualization

答案 4 :(得分:0)

类似的东西:

((-\s)?\d+##)+\d+