【问题标题】:RegExp (javascript) :: find a group of php variables including the $ character (Enlighter JS)RegExp (javascript) :: 查找一组包含 $ 字符的 php 变量(Enlighter JS)
【发布时间】:2020-08-17 12:29:29
【问题描述】:

我正在尝试从整个“代码块”字符串中找到几个自定义 php 变量,以通过 EnlighterJS (v3.3) 启发它们 https://github.com/EnlighterJS/EnlighterJS/commit/a5854c3455b68790aa21d56e2ceb7b734dd72913

在我的 php 代码块中,我使用了一堆重复的自定义变量,这些变量很可能被认为是全局常量,例如:

$TIME_MS, $GET_URL, $FILE_TYPE

我设法启发了常量没有 $ 字符:

regex: /\b(TIME_MS|GET_URL|FILE_TYPE)\b

但是我怎样才能同时捕捉到 $ 字符呢? 这不起作用:

/\b(\$TIME_MS|\$GET_URL|\$FILE_TYPE)\b

谢谢,最好的,

马克斯

【问题讨论】:

    标签: javascript php regex


    【解决方案1】:

    字边界在$ 字符前面不起作用,因为这不是字字符。 \b 查找单词和非单词字符之间的界限。相反,您可以使用(?<!\S)\$:

    (?<!\S)\$(TIME_MS|GET_URL|FILE_TYPE)\b
    

    Demo

    如果您的正则表达式工具不支持lookbehinds,那么也许您可以在$ 之前搜索一个空格字符。但是,这不会捕获 $ 变量恰好开始行或输入的情况。

    【讨论】:

    • 谢谢,但不幸的是,这给了我一个错误。我错过了什么吗?我的全线:regex: /(?&lt;!\S)\$(TIME_MS|GET_URL|FILE_TYPE)\b/,
    • @Maxxx 是的,没错,检查模式工作的演示。正如我在回答的后半部分提到的,也许您的正则表达式工具不支持后视。在这种情况下,只需在 $ 之前放一个空格即可:[ ]\$(HIDE_WHOLE_CONTROL|HIDE_PART_NOTHING)\b
    • 我知道为什么它现在给了我一个错误,因为正则表达式在手镯内。所以我不得不转义括号。但现在它仍然没有抓住 $ 可能是因为转义?! { regex: /\(?&lt;!\S\)\$(TIME_MS|GET_URL|FILE_TYPE)\b/gi, type:"gvar" },
    • 您在上面评论中发布的正则表达式无效,无法在任何地方使用。
    • 是的,我以前的正则表达式仍然捕获 $ 之后的字符串。但是没有(?&lt;!\S) 有什么解决方法吗?因为这肯定会给我与 EnlighterJS 一起带来严重错误:(
    【解决方案2】:

    这个似乎现在可以工作了:

    { 正则表达式:/(\$TIME_MS|\$GET_URL|\$FILE_TYPE)\b/gi, 类型:“gvar”, },

    DEMO

    如果我错过了换行之类的东西,请纠正我

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2013-08-16
      • 1970-01-01
      相关资源
      最近更新 更多