【问题标题】:regex multliline string for ace王牌的正则表达式多行字符串
【发布时间】:2016-08-12 12:59:02
【问题描述】:

我编写了正则表达式来突出显示多行字符串,并在 regexr.com 上对其进行了测试,它提供了正确的突出显示。但这在厨房水槽中测试时不起作用。

正则表达式:(["]\n(['].*\n)*(\s)*["])

{
token : "multistring", // multi line string
regex : '(["]\n([\'].*\n)*(\s)*["])'
}

文件:

css:pastebin

highlighting_rules:pastebin

正则表达式规则:

正则表达式应以引号 (") 开头,以引号 (") 作为行上的第一个字符结束。在这两者之间,每一行都应该以撇号 (') 开头。

有效的多行示例:

//1=========================
"
'This
     "

//2=========================
"
'This
'That
"

//3=========================
"
'This
'That
 "

//4=========================
"
'This
'That
     "

无效的多行示例:

//5=========================
"
WRONG'This
"

//6=========================
"Stuff
'This
"

任何帮助将不胜感激!

【问题讨论】:

  • edit 发布您正在使用的实际 JavaScript 代码。您如何从发布的字符串到 RegExp 对象?
  • 我已经编辑了这篇文章并包含了更多关于 Ace 而不仅仅是 Javascript 的信息。正则表达式保存为变量中的字符串,稍后在 ace 库中传递。您可以在第 49 行的 w highlight_rules 链接中看到语法。谢谢
  • ace标签是ACE C++库的,好像不是你使用的库
  • 目前的问题是 Ace 逐行读取。所以我发布的正则表达式永远不会起作用。

标签: javascript regex string multiline ace-editor


【解决方案1】:

我在这里猜测,但可能是 Kitchen Sink 自动设置了 single line/DOTALL 修饰符,这使得 . 匹配 new line。而且由于您的正则表达式使用.*从不是好的),它吃掉了//1的第一部分和//6的最后一行之间的所有内容。

如果你尝试怎么办

regex : '"\\n(?:\'[^\\n]*\\n)*\\s*"'

基本上和你的一样。删除了一些不必要的东西,最重要的是,将您的 .* 更改为 [^\n] - 匹配除 new line 之外的所有内容。

希望这会有所帮助。

问候

编辑:

通读我的答案后,我意识到 - 我忘了避开反斜杠 - 你也是。更改了正则表达式。希望它现在可以工作。

【讨论】:

  • 感谢您的回复。这段代码可以工作。但不幸的是,Ace 逐行读取,而不是每个文档。所以 \n 可悲的是不可能。那里需要更多 Ace 语法哈哈
【解决方案2】:

由于 ace 逐行读取 \n 在正则表达式中不起作用。

我发现这些链接很有帮助:linklink2

{ // Multiline String
            token : 'multistring', // Start
            regex : '["]$',
            push : [
                {
                    token: 'multistring',
                    regex:/^(\s*'.*)/ // middle
                },
                {
                    token: 'multistring',
                    regex:/^\s*["]/, // end
                    caseInsensitive:true,
                    next:"pop"
                },
                {defaultToken:"testerx"} // Everything else that does not match
            ]
        }

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2015-01-11
    • 2015-08-22
    相关资源
    最近更新 更多