我在Java中编写语法高亮显示器。我使用关键字var:
在我的自酿语言中声明变量var alpha
变量名仅由字母构成。声明始终出现在函数的顶部。我希望在声明后匹配所有出现的单词。我已经达到了:
\\bvar\\s+([a-zA-Z]+)\\b(?:.*?(\\1)\\b)*
(反斜杠都在Java代码中转义)
但是,这仅匹配变量的第一次和最后一次出现。我试图改变' *'贪婪/非贪婪/占有欲但它似乎没有帮助。
示例:
alpha var alpha alpha alpha
除了匹配的第一个
之外的所有alphavar alpha beta alpha
所有alpha匹配的beta不匹配
答案 0 :(得分:0)
如果您逐个匹配第一个var名称,则可以执行此操作。要确保var名称前面带有关键字$("#sync1 .item").on("click", function() {
var index = $(this).attr("data-slick-index");
$(".overlay-carousel-container").css("display", "block");
$("body").css("overflow", "hidden");
$("#overlayCarousel").slick({
slidesToShow: 1,
slidesToScroll: 1,
fade: true,
initialSlide: index,
focusOnSelect: true
});
})
$(".close").on("click", function() {
$(".overlay-carousel-container").css("display","none");
$("body").css("overflow", "inherit");
$("#overlayCarousel").slick("unslick");
$("#executiveOverlay").slick("unslick");
});
,您需要使用var
功能,该功能是最后一次匹配后位置的锚点(这可确保匹配是连续的)。
\G
以(?m)(\\G(?!\\A)|\\W*(?>\\w+\\W+)*?\\bvar[^\\S\\n]+)(\\w++)([^\\S\\n]*(?>\\w+[^\\S\\n]+)*?)(?=\\2|$)
作为替代。
demo(点击绿色Java按钮)
模式细节:
$1*$2*$3
(*)默认情况下,第一个结果(?m) # switch on the multiline mode
( # capture group 1
\\G(?!\\A) # contiguous to the previous match (*)
|
\\W*(?>\\w+\\W+)*? # to reach quickly the "var" keyword
\\bvar
[^\\S\\n]+ # whitespaces except newlines
)
(\\w++) # capture group 2: first var name
([^\\S\\n]*(?>\\w+[^\\S\\n]+)*?) # capture group 3:
# reach the next occurence of the var name
# or the end of the line
(?=\\2|$)
匹配字符串的开头。 \G
仅用于防止此情况发生。