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