gpt4 book ai didi

javascript - 具有嵌套名称的 JavaScript 变量的正则表达式

转载 作者:行者123 更新时间:2023-12-03 03:23:52 26 4
gpt4 key购买 nike

当我需要匹配一个简单的开放值 JavaScript 变量时,我使用了以下正则表达式:

\s*[a-zA-Z0-9$_]+\s*

现在我需要添加对嵌套属性的支持,即名称中可以有点 (.),并考虑以下事项:

  • . 不能位于开头或结尾
  • 单个 . 本身无效
  • 不允许使用重复的点 (a..b)

修改这种正则表达式模式的正确/最简单的方法是什么?

如果有什么不同的话,我只对在 Node.js 下工作的版本感兴趣

<小时/>

有效示例

  • 一个
  • a.b
  • a.b.c
  • _.$.123

无效示例

  • ``
  • .
  • .a
  • a.
  • a..b

最佳答案

好吧,我发现的最简单的方法是以下正则表达式

^\s*(([a-zA-Z0-9$_][a-zA-Z0-9$_\.]*[a-zA-Z0-9$_])|([a-zA-Z0-9$_]))\s*$

它匹配至少三个字符的字符串(中间有可选的点)或有效集的单个字符。它适用于您示例中的数据。如果您想在一行中匹配多个变量,您可以使用否定前瞻,例如

\s*(?!\.)[a-zA-Z0-9$_\.]*(?!\.)\s*

后一个表达式也适用于您的测试数据 ( http://regexr.com/3gra2 ),但会捕获变量之间的每个空格,因此您可能需要 trim 结果。我还担心长文本上的负面展望可能会变得非常复杂。

正如我在评论中提到的,从 JavaScript 代码中提取变量名称的唯一可靠方法是抽象语法树 (AST) 解析器,它还考虑 newvar 等关键字>、函数等..

关于javascript - 具有嵌套名称的 JavaScript 变量的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46442884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com