首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不删除非分组模式的情况下标记(使用html标记)模式中的组?

如何在不删除非分组模式的情况下标记(使用html标记)模式中的组?
EN

Stack Overflow用户
提问于 2020-04-28 08:06:53
回答 1查看 52关注 0票数 2

我正在构建一个单页lua应用程序,为lua-patterns提供实时结果。我使用vue magic和fengari js/lua interop在每次匹配文本或模式更新时自动在屏幕上运行函数。该函数的目标是突出显示匹配的文本。

这里相关的lua代码是函数,我首先想到的就是gsub。

string.gsub(text_to_test, pattern, function(m) return "<mark>"..m.."</mark>" end)

对于没有分组的模式,这是非常有效的。例如:%u%l

测试字符串:结果模式:%s. This is your sandboxThis<mark> i</mark>s<mark> y</mark>our<mark> s</mark>andbox

但是,如果有人想要用一个组来测试一个模式,比如:%s(.) (或者更糟:多个组!)

相同的测试字符串,模式现在是:%s(.) Result: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)

测试字符串:结果模式:%s. This is your sandboxThis%0s%0our%0andbox

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

期望的结果:

对于测试字符串Quick Brown Fox和模式%s(%u)

生成Quick<mark> B</mark>rown<mark> F</mark>ox

我不知道解决方案是什么。你有什么推荐的?

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 08:35:07

将他们给你的整个模式放在括号中,所以它是第一组,无论它是什么组:

代码语言:javascript
复制
string.gsub(text_to_test, "("..pattern..")", function(m) return "<mark>"..m.."</mark>" end)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61470535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档