如何将文本区域标签与特定属性匹配



我只想将文本区域标签与某个属性匹配。鉴于我有这个字符串:

{{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>

最新更新