我有一些字符串,我想使用正则表达式来提取任何html标签,以及来自一组花括号的文本。
例如,我可以拥有以下2个字符串:
Is this a { <strong> Versioned placeholder </strong> } file?
Is this a <strong> { Versioned placeholder } </strong> file?
到目前为止,我有以下正则表达式:
(?:\{)(?<PlaceholderValue>\s*[\w\s]*\s*)(?:\})
我想要的是花括号中的文本(即“ Versioned placeholder ”)放在 PlaceholderValue 组中,以及所有其他html标签WITHIN花括号也被捕获。我怎么能这样做?
请注意,花括号内的html标签是可选的,并不总是存在。如果html标签在大括号之外,我不感兴趣。
答案 0 :(得分:2)
您可以使用
(?:{|(?!^)\G)\s*\K(?:(?<tag><[^>]+>)|(?<PlaceholderValue>[^<}]*[^<}\s]))
请参阅regex demo
模式匹配:
(?:{|(?!^)\G)
- {
或上一次成功匹配的结束\s*
- 0+空格(从左边修剪)\K
- 匹配重置运算符(?:(?<tag><[^>]+>)|(?<PlaceholderValue>[^<}]*[^<}\s]))
- 一组2个替代方案:
(?<tag><[^>]+>)
- Group&#34; tag&#34;匹配除<
和<
以及>
>
,1 +个字符
|
- 或(?<PlaceholderValue>[^<}]*[^<}\s])
- Group&#34; PlaceholderValue&#34;尽可能多地捕获除<
和}
之外的0 +字符,然后捕获不是空格的强制字符<
和}
。答案 1 :(得分:0)
(?<=\{ )(.*?)(?= \})
这应该取决于你正在使用的正则表达式
答案 2 :(得分:0)
你可以在javascript中试试这个:
var string1 = 'Is this a { <strong> Versioned placeholder </strong> } file?';
var string2 = 'Is this a <strong> { Versioned placeholder } </strong> file?';
var reg = /<(strong)>[\{\}\w\s]+<\/\1>/;
alert(string1.match(reg)[0].replace(/<strong>|<\/strong>|{|}/g, ''));
alert(string2.match(reg)[0].replace(/<strong>|<\/strong>|{|}/g, ''));