/^[a-z][ ][=][>][ ][a-z?][.?][a-z0-9]+[ ][=][ ]['?][a-z0-9]+['?]]/i
我正在尝试找出如何获得一个可以识别 lambda 语法字符串(在 C# 中使用)的 rexex 模式
对于字符串
"p => p = 'some random string'" //Must alow for single quotes
对于数字或 bool 值
"p => p = true" /*or*/ "p => p = 25" //Must allow for a string without single quotes with no whitespace at all in the event there are no single quotes
它还必须允许单个“.”在“=”号左侧所选的字母中
"p => p.firstName = 'Jack'"
如何修改我的正则表达式以满足以下要求
- 以任意字母开头
- 后跟一个必填空格
- 后跟强制字符串“=>”(不带单引号)
- 后跟一个必填空格
- 后跟第 1 步中的相同字母(或至少一个字符)
- 后跟句点字符(可选)
- 后跟任意一组字母数字字符(如果第 6 步中存在句点,则为必需)
- 后跟一个空格
- 后跟等号
- 后跟一个空格
- 后跟任何字母数字字符集和单引号(但前提是单引号包含该字母数字字符集)
最佳答案
首先,一般来说,您不需要所有的[]
,只需要字符类(例如 [a-zA-Z]
或 [_\$0-9]
)。
让我们按顺序完成您的步骤:
- 匹配任何字母 - 您不指定大小写,让我们同时执行这两个操作:
- 仅小写:
([a-z])
- 仅限大写:
([A-Z])
- 两者:
([a-zA-Z])
。 - 我们将其包装在
()
中,以便稍后在反向引用中使用它。
- 仅小写:
- 强制字符串
=>
(合并步骤 2-4)就是字面上的意思:=>
。由于这些都不是特殊字符,因此无需转义。 - 为了获得与步骤 1 相同的字母,我们将反向引用插入到第一组(
()
组):\1
- 对于第 6 步和第 7 步,我们将句点和一个字母数字字符作为可选:
(\.\w)?
,然后是零个或多个字母数字字符:\w*
- 现在我们有了文字字符串
=
,同样,这些字符都不需要转义,因此我们直接包含它:=
- 对于最后一步,我们有几种选择:
- 一些不带空格的数字字符:
\d+
- 对或错
- 或者,单引号,除单引号之外的任何字符,然后再次单引号:
'[^']*'
(我们使用负字符类来获取除单引号之外的所有字符'
) - 现在我们使用
|
将它们连接在一起作为替代方案
- 一些不带空格的数字字符:
将所有这些放在一起,我们得到最终的正则表达式:
/([a-zA-Z]) =>\1(\.\w)?\w* = (\d+|true|false|'[^']*')/i
关于javascript - C# 的 JS 正则表达式 "lambda syntax",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36392150/