繁体   English   中英

如何匹配特定的封闭模式以及JS中的REGEX

[英]how to match a specific enclosed pattern and anything in between with REGEX in JS

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

虽然这很容易,但是我需要一个对大而多行的字符串来说很健壮的解决方案。

例如 :在以下情况下,我只想匹配第一个和第二个匹配的%%组合以及第三和第四个(等等)。

这个%data%不是我想要%显示在结果中的%data。 %一些示范文字%

我只想搭配零件

%数据%

我要%的数据

%一些示范文字%

从上面的字符串..

我努力了:

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

/^\%[\s\S]*\%$/gm

如果已经问过这个问题,并且您想关闭它。.请向我指出正确的方向,然后关闭它。

这与许多标题所标记的问题不同

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

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


我真的想对RegEX进行一个很好的描述,如果有人可以为它提供答案..因为我不精通阅读复杂得多的RegEx,只是习惯了它.. 我也想解释一下为什么我的代码正在崩溃 ,将来对我没有帮助。

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

/%(.*?)%/g

这偷懒地捕获(即,尽可能少地扩展,根据需要扩展)介于2 %之间的所有内容。

这的替代方法:

/%([^%]*)%/g

在这一本书中,我们不是偷懒地匹配,而是匹配(捕获)除%之后的%

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

 const regex = /%(.*?)%/g; const str = `this %data% is not %data that i want to % show up in the results. % some more demo text %`; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); } 

这是您需要的:

正则表达式:

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

输入:

sdgsg%data%dgsgdsg

输出:

数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM