Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有一个或两个参数的函数的正则表达式验证_Javascript_Regex - Fatal编程技术网

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

Javascript 具有一个或两个参数的函数的正则表达式验证,javascript,regex,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应该会导致匹配失败,但不会。我做错了什么?使用带有RegExp evaluator的Firefo

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

[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
应该会导致匹配失败,但不会。我做错了什么?

使用带有RegExp evaluator的Firefox“开发者助手”插件,我发现组1、3和4是匹配的

1=123

3=你好

4=你好

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

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

(

)

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

([\,]{0,1}

){0,1}\)

您可以使用:

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

代码有问题:

您的代码不足以满足您的要求

我将其更新为:


只需强制执行此命令即可:

而不是:

[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.]+|(\[[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\.% ]+[^ ,)(]+\]
    )
)?
\)

你的初始用例是什么?你正在实现一个JS解析器吗?为什么你想知道一个函数是否正好有两个参数?如果这是针对JS的,你应该在第一个范围中添加
$
\
,而不是
%
。我正在循环验证它是否匹配,如果匹配,用
0
替换它。这个函数我知道匹配的是什么,我需要知道为什么以及如何避免
123
。它在这种情况下失败:
int(213[sdf])
@Aashray:你能解释一下你的要求吗?它不应该接受
int(213[sdf])
,它应该只接受
max(213[sdf])
int(213)
int([sdf])
int(sadf)呢??
[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\.% ]+[^ ,)(]+\]
    )
)?
\)