0

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

%%[


set @truth = 'this is amp'

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

]%%

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

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

但这会选择外壳内的所有字符,有没有一种方法可以只选择空格/换行符/tabindents?

提前致谢!

4

1 回答 1

1

我相信这就是你想要的:

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

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

编辑

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

1.

首先,我们从积极的向后看开始 (?<= )

这将确保在此之后的模式将在内部模式之前,但不会将其包含在匹配项中。

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

因此,我们生成的 Positive Lookbehind 代码是

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

2.

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

在这种情况下,这只是任何空白字符,所以我们的模式将是

\s

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

3.

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

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

所以这是我们生成的 Lookahead:

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

4.

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

(?<=%%\[(\s|.)*)\s(?=(\s|.)*\]%%)
于 2022-02-12T03:24:49.463 回答