javascript - 用于匹配两个其他字符串之间的字符串的正则表达式

标签 javascript regex

JavaScript 中的另一个硬正则表达式:

我有这个字符串:

    <td style="padding:0 2%">{% for product in products.pos01 %}    
<table class="box-item" item-editable="" style="float:left;padding-bottom:10px; width:32%;border-spacing: 0px; border: 0px; border-collapse: collapse;"><tr><td style=" padding:10px 5px; vertical-align:top ">
<a href="**|product.url|**" class="button view-deal" style="padding:8px 10px; background-color: #fc5d26; text-decoration:none; display:inline-block; text-align:center; color:#fff; font-size:12px;margin:0px; line-height:140%;text-transform:uppercase">view deal</a></div></td></tr></table>{% if (loop.index0-2) is divisibleby 3 %}</td></tr><tr>
<td style="padding:0 2%">{% endif %}{% endfor %}
 </td>

我正在尝试从字符串 {% for ... %} 和 {% endfor %} 获取任何循环内的内容

我尝试过,但无法获取

/({% for (!?%})+ %})((!?endfor)*){% endfor %}/gm

但没有成功

最佳答案

我认为你应该使用与此类似的模式

正则表达式

(?<={% for[^%]*%})((?:.|\n)*)(?={% endfor %})

说明

(?<={% for[^%]*%}) :使用lookbehind来搜索模式{% for[^%]*%}

(?={% endfor %}) :使用 Lookahead 搜索文本 {% endfor %}

((?:.|\n)*) :for循环之间的消息,由变量$1捕获

但如果您的语言不支持环视,您只需使用此

正则表达式

({% for[^%]*%})((?:.|\n)*)({% endfor %})

说明

({% for[^%]*%}) :捕获模式{% for[^%]*%}到变量$1

({% endfor %}) :捕获模式{% endfor %}到变量$3

((?:.|\n)*) :for 循环之间的消息,由 $2 捕获

修改我的regex即可根据您语言的限制,您将完成此操作。

编辑

当我搜索时,我认为Javascript不支持环视和另一件事{ , }需要通过\逃脱。我已经使用一些在线 Javascript 正则表达式测试器测试了正则表达式,我明白了。

(\{% for[^%]*%\})((?:.|\n)*)(\{% endfor %\})

要获取所需的文本,只需使用变量 $2 .

附加

如果您想捕获嵌套循环内的消息,例如

消息示例

{% for product in products.pos01 %} 
    ...
    {% for product in products.pos02 %}
         "messages"
    {% endfor %}
    ...
{% endfor %}

捕获"messages"在这个嵌套循环中,您只需将我之前的正则表达式修改为

(\{% for[^%]*%\}(?:.|\n)*\{% for[^%]*%\})((?:.|\n)*)(\{% endfor %\}(?:.|\n)*\{% endfor %\})

说明

(\{% for[^%]*%\}(?:.|\n)*\{% for[^%]*%\}) : 表示“for 循环的开始”,后跟“包括换行符在内的任何字符”,然后是“for 循环的开始”

((?:.|\n)*) :我们的目标消息

(\{% endfor %\}(?:.|\n)*\{% endfor %\}) : 表示“for 循环结束”,后跟“包括换行符在内的任何字符”,再后跟“for 循环结束”

请注意,我只是重新排列了之前的正则表达式来完成这项更复杂的工作。

关于javascript - 用于匹配两个其他字符串之间的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145167/

相关文章:

javascript - 自定义模板和 ng-click Angular Formly

javascript - 将类似字符串的数组替换为带有字符替换的数组

java - 解析由空格分隔、有序但可选元素组成的字符串

c# - 正则表达式 - 在替换字符之间添加空格

regex - 替换 ini 文件中的 block 文本

javascript - 淡出后的进度

javascript - 如何用javascript初始化php变量?

javascript - sIFR 不适用于列表中的 child

regex -/g 修饰符与 while 循环

css - 将父 ID 添加到大 css 文件中