javascript - C# 的 JS 正则表达式 "lambda syntax"

标签 javascript regex

/^[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. 以任意字母开头
  2. 后跟一个必填空格
  3. 后跟强制字符串“=>”(不带单引号)
  4. 后跟一个必填空格
  5. 后跟第 1 步中的相同字母(或至少一个字符)
  6. 后跟句点字符(可选)
  7. 后跟任意一组字母数字字符(如果第 6 步中存在句点,则为必需)
  8. 后跟一个空格
  9. 后跟等号
  10. 后跟一个空格
  11. 后跟任何字母数字字符集和单引号(但前提是单引号包含该字母数字字符集)

最佳答案

首先,一般来说,您不需要所有[],只需要字符类(例如 [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/

相关文章:

javascript - 如何在Vue js中访问子属性

javascript - 无法使用formset上传多张图片

php - MySql REGEXP 通过包含特定单词进行多单词搜索

c# - 结合两个正则表达式进行 ASP.NET MVC 数据注释

c++ - std::regex 是否支持 "(?i)"不区分大小写?

python - 正则表达式引用 re.sub 中的变量

javascript - 如何解决angularjs Uncaught Error : [$injector:modulerr]?

javascript - 如何在不更改原始 swf 文件的情况下跳转到 swiffy 转换文件中的特定帧?

javascript - jQuery Source File 一起运行;我该怎么办?

regex - 整数值的 MongoDB 正则表达式搜索