我只想将文本区域标签与某个属性匹配。鉴于我有这个字符串:
{{one}}
<div>{{two}}</div>
<textarea data-match-this="true">{{three}}</textarea>
<textarea>{{four}}</textarea>
{{five}}
我目前有这个正则表达式:
({{(?!#|/).*?}})(?!<textarea>)(?!</textarea>)
它当前匹配除文本区域中的标签之外的所有标签。我可以使用什么正则表达式来使它能够将文本区域内的标签与"data-match-this='true'"属性匹配?
这是我的鲁布拉尔:https://rubular.com/r/RuVrypBsdDVJii
你会这样做
/<textarea(?=s)(?=(?:[^>"']|"[^"]*"|'[^']*')*?sdata-match-thiss*=s*(?:(['"])s*trues*1))s+(?:"[Ss]*?"|'[Ss]*?'|[^>]?)+>([Ss]*?)</textareas*>/
https://regex101.com/r/Oy6vQd/1
内容位于第 2 组中的位置。
注意 - 搜索的属性
/值的位置是独立的,它可以在标签中的任何位置。
解释
# Begin open textarea tag
< textarea
(?= s )
(?= # Asserttion (a pseudo atomic group)
(?: [^>"'] | " [^"]* " | ' [^']* ' )*?
s data-match-this s* = s*
(?:
( ['"] ) # (1), Quote
s* true s* # data-match-this = true
1
)
)
# Have the data-match-this = true,
# just match the rest of tag
s+
(?: " [Ss]*? " | ' [Ss]*? ' | [^>]? )+
> # End span tag
( [Ss]*? ) # (2), textarea content
</textarea s* > # Close textarea tag
我猜这个表达式可能会起作用,但可能会稍作修改:
^((?=(.*?<textarea.*(data-match-this="true".*))>)|(?!(.*?<textarea.*>))).*?({{(?!#|/).*?}}).*$
如果您想进一步探索或简化/修改它,请在此演示的右上角面板上解释,在此链接中,如果您愿意,可以逐步观看它如何与一些示例输入匹配。
我只能将文本区域标签(包括带有类的标签和没有内容的标签(与使用它的data-match-this='true'
匹配 正则表达式:<textarea.*data-match-this="true".*>.*</textarea>
.如果您需要捕获内容,只需添加一些括号,如下所示:<textarea.*data-match-this="true".*>(.*)</textarea>
.要使其仅获取包含内容的标记,请将最后一个.*
更改为 .+
: <textarea.*data-match-this="true".*>.+</textarea>