[英]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.