具有一个或两个参数的函数的正则表达式验证

时间:2014-01-30 10:45:08

标签: javascript regex

这是我的正则表达式。我想匹配一个或两个参数的函数

[a-z0-9\%\. ]+\(([0-9\.]+|(\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1}))([\,]{0,1}([0-9\.]+|\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1})){0,1}\)

大部分时间都可以完成工作,但是这种情况失败了:

int(123[hello])

介于两者之间的123会导致匹配失败,但不会失败。我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

使用RegExp评估程序为Firefox使用“Developer Assistant”插件,我发现第1组,第3组和第4组是匹配的。

  

1 = 123

     

3 =你好

     

4 =你好

我看到int(部分与[a-z0-9\%\. ]+\(

匹配

然后,123与以下内容匹配,特别是第一部分(为清晰起见而添加了空白)

  

[0-9\.]+|

   (\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1})
     

[hello]部分(但不是))与第三部分(从\[{1}[开始)匹配:

  

([\,] {0,1}

([0-9\.]+|

    \[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1}

)
     

){0,1} \)

答案 1 :(得分:0)

您可以使用:

 ([a-z0-9\%\. ]+\((?:[0-9\.]+|\w*(?:\[[a-zA-Z0-9\.% ]+[^ ,\)\(?:]+\]))(?:[\,]?(?:[0-9\.]+|\w*\[[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]))?\))

<强> DEMO

您的代码出现问题:

您的代码不足以符合您的要求。

enter image description here

我将其更新为:

enter image description here

答案 2 :(得分:0)

强制要求昏迷:

而不是:

[a-z0-9\%\. ]+\(([0-9\.]+|(\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1}))([\,]{0,1}([0-9\.]+|\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1})){0,1}\)

做的:

[a-z0-9\%\. ]+\(([0-9\.]+|(\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1}))([\,]([0-9\.]+|\[{1}[a-zA-Z0-9\.% ]+[^ ,\)\(]+\]{1})){0,1}\)
//                                                            here __^

你也可以做一些简化:

[a-z0-9%. ]+\(([0-9.]+|(\[[a-zA-Z0-9\.% ]+[^ ,)(]+\]))(,([0-9.]+|\[[a-zA-Z0-9.% ]+[^ ,)(]+\]))?\)

为了便于阅读:

[a-z0-9%. ]+\(
(
    [0-9.]+
    |
    (
        \[[a-zA-Z0-9\.% ]+[^ ,)(]+\]
    )
)
(
    ,
    (
        [0-9.]+
        |
        \[[a-zA-Z0-9\.% ]+[^ ,)(]+\]
    )
)?
\)