Javascript 如何使用JS中的正则表达式匹配特定的封闭模式以及介于两者之间的任何内容

Javascript 如何使用JS中的正则表达式匹配特定的封闭模式以及介于两者之间的任何内容,javascript,regex,Javascript,Regex,我想在字符串中匹配这样的模式%data% 虽然它可以很容易,但我需要的解决方案,可以为一个大的多行字符串稳健 例如:我只想匹配以下内容中的第一个和第二个匹配%%组合以及第三个和第四个(等): 此%data%不是我希望%显示在结果中的%data.% 更多演示文本% 我只想匹配零件 %数据% , %我要删除的数据% , %更多演示文本% 从上面的字符串 我试过: 我试图使用此模式,但它选择了从第一个%到最后一个%符号的所有模式 /^\%[\s\S]*\%$/gm 如果有人问了这个问题,而你想结束它

我想在字符串中匹配这样的模式%data%

虽然它可以很容易,但我需要的解决方案,可以为一个大的多行字符串稳健

例如:我只想匹配以下内容中的第一个和第二个匹配%%组合以及第三个和第四个(等):

此%data%不是我希望%显示在结果中的%data.% 更多演示文本%

我只想匹配零件

%数据%

,

%我要删除的数据%

,

%更多演示文本%

从上面的字符串

我试过:

我试图使用此模式,但它选择了从第一个%到最后一个%符号的所有模式

/^\%[\s\S]*\%$/gm
如果有人问了这个问题,而你想结束它。。只要给我指出正确的方向,如果你想的话就把它关上。。谢谢

这与许多人提出的问题不同。标题为:

正则表达式匹配两个字符串之间的所有字符

和网址: 因为它是普通的正则表达式,而不是JS中的正则表达式(因为JS不支持lookbehind),而且它也没有像我一样的对匹配问题。。因此,我认为这是完全不同的



如果有人能提供答案,我真的很想对RegEX进行一个很好的描述。。因为我不太擅长阅读复杂的正则表达式,只是习惯了。。而且我还想解释一下为什么我的代码会中断并且无法工作,以便将来对我有所帮助。

您可以使用以下正则表达式:

/%(.*?)%/g
这会缓慢地捕获(即,尽可能少地根据需要扩展)两个
%
之间的所有内容

另一种选择是:

/%([^%]*)%/g
在本例中,我们不是懒洋洋地匹配,而是在
%

使用此正则表达式的工作输出:

const regex=/%(.*?)%/g;
const str=`此%data%不是我希望%显示在结果中的%data.%更多演示文本%`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});
}
这就是您需要的:

正则表达式:

(?<=\%)(.*?)(?=\%)

(?此程序的可能副本您可以使用字符读取每个字符,并使计算机0开始1结束,以获取字符串中的文本输入和位置。IDe细枝尝试
/%([^%]*)%/g
会更有效,因为如果你将其从匹配中排除,那么你就不会跳过第二个和第三个
%
之间的字符。嘿,谢谢。我理解并理解这两个字符都很有效。但是你能告诉我,如果我想在匹配中添加新行字符(以及“.”吗点字符与之不匹配),在这个正则表达式/%(.*?)%/g中,我该怎么做。为什么不在常规括号内添加\n,如so/%([\n.]*?)%/gm不起作用?@Vimal_ufrontendweb您可以使用:
[\s\s]
而不是
点,以匹配甚至是新行字符,
[\n.]
不起作用,因为
[]
中没有任何特殊意义。请参阅此处的实时演示: