正则表达式 select 特殊外壳之间的所有空格

Regex to select all spaces between a special enclosure

我正在尝试为 Javascript 编写一个正则表达式,它可以 select AMPScript 括号之间的所有空格,Lang 的语法是这样的

%%[


set @truth = 'this is amp'

IF @truth == 'this is amp' THEN
set @response = 'amp rocks'
ELSE
set @response = '️...'
ENDIF

]%%

到目前为止,我可以使用这个表达式 select 给定括号内的所有字符:

%%\[(\s|.)*?\]%%

但是这个select里面所有的字符都是圈内的,有没有什么方法可以只selectspaces/newlines/tabindents?

提前致谢!

我相信这就是你想要的:

(?<=%%\[(\s|.)*)\s*(?=(\s|.)*\]%%)

https://regex101.com/r/EWhbuX/1

编辑

下面是正则表达式的细分:

1.

首先我们从正面回顾 (?<= )

开始

This will make sure that the pattern that's following this, will be preceded by the pattern inside, but will not be include it in the matches.

在这种情况下,我们希望我们的匹配模式前面有 %%[ 和任何其他字符 %%\[(\s|.)*

因此,Positive Lookbehind 的结果代码是

(?<=%%\[(\s|.)*)

2.

接下来是我们实际想要在 Lookabehind 之后匹配的模式,以及(剧透警报),在我们稍后定义的 Lookahead 之前。

在这种情况下,这只是 任何空格 字符,因此我们的模式将是

\s

(是的,我只是注意到我们在原来的答案中甚至不需要 *)

3.

类似于我们在表达式开头使用 Lookbehind 所做的,我们现在需要一个 Positive Lookahead (?= )

这是为了确保我们的空格后跟任何字符和 ]%% (\s|.)*\]%%.

所以这是我们的结果 Lookahead:

(?=(\s|.)*\]%%)

4.

把所有东西放在一起,你就有了正则表达式!

(?<=%%\[(\s|.)*)\s(?=(\s|.)*\]%%)