任何Lua模式替代正则表达式(\\.|.)?

Nic*_* M. 3 lua lua-patterns

有一个常见的习惯用于遍历字符串,其字符可以使用正则表达式使用反斜杠进行转义(\\.|.),如下所示:

alert( "some\\astring".replace(/(\\.|.)/g, "[$1]") )
Run Code Online (Sandbox Code Playgroud)

这是在JavaScript中.此代码将字符串更改some\astring[s][o][m][e][\a][s][t][r][i][n][g].

我知道Lua模式不支持OR运算符,因此我们无法将此正则表达式直接转换为Lua模式.

然而,我想知道:是否有另一种方法可以使用Lua模式在Lua中执行此操作(遍历可能转义的字符)?

ste*_*ema 5

你可以试试

(\\?.)
Run Code Online (Sandbox Code Playgroud)

并替换为 [$1]

在Regexr上看到.

?是0或1出现的快捷量词,因此上述模式匹配前一个字符和一个可选的反斜杠.如果?不工作(我不知道lua)你可以试试{0,1}.这是同样的长版本.

  • 很好的答案.为了让OP更清楚,在`(\\.|.)`中,交替的顺序很重要,但是因为`?`是一个贪婪的量词,所以在尝试之前它总是会尝试`\\.` `.`(`{0,1}`也会首先尝试`1`解决方案 (2认同)
  • 在Lua中,'%1`代替`$ 1`.除此之外,你的模式应该工作:`string.gsub("some \\ astring","(\\ ?.)","[%1]")` (2认同)