您如何在不删除未分组模式的情况下标记(带有html标签)模式组?

问题描述 投票:1回答:1

我正在构建一个单页面的webapp,它可以提供lua模式的实时结果。每当您要匹配的文本或某个模式被更新时,我都会使用vue magic和fengari js / lua interop自动在屏幕上运行一个功能。该功能的目的是突出显示匹配的文本。

这里相关的lua代码是函数,我想到的第一件事就是gsub。string.gsub(text_to_test, pattern, function(m) return "<mark>"..m.."</mark>" end)这非常适用-适用于没有分组的模式。如:%u%l测试字符串:This is your sandbox模式:%s.结果:This<mark> i</mark>s<mark> y</mark>our<mark> s</mark>andbox但是,如果有人想要测试一组模式,例如:%s(.)(或更糟糕的是:多个组!),该怎么办?相同的测试字符串,模式现在为:%s(.)结果:This<mark>i</mark>s<mark>y</mark>our<mark>s</mark>andbox函数的工作方式,将组中的字符作为m传递,并且返回的字符串替换整个模式%s(.),空格和字符。那不好!但是,我们知道gsub中的"%0"代表整个比赛,而不是不同的小组-计划:在每个整个比赛中,标记各个小组。string.gsub(s, p, function(m) local w = "%0" return string.gsub(w, m, function(a) return "<mark>"..a.."</mark>" end) end)测试字符串:This is your sandbox模式:%s.结果:This%0s%0our%0andbox

问题:%0仅在直接在返回字符串中时才能被引用。另外,即使我可以引用%0,我也不认为这会起作用。

期望的结果:对于测试字符串Quick Brown Fox和模式%s(%u)产生Quick<mark> B</mark>rown<mark> F</mark>ox

我不知道解决方案是什么。您会推荐什么?

我正在构建一个单页面的webapp,它可以提供lua模式的实时结果。每当您输入文字时,我都会使用vue magic和fengari js / lua interop在屏幕上自动运行一个功能...

lua lua-patterns
1个回答
0
投票

将它们给您的整个模式都用括号括起来,所以不管是哪个组,它都是第一组:

© www.soinside.com 2019 - 2024. All rights reserved.