如何为以下语句编写正则表达式?

时间:2016-08-02 12:17:56

标签: regex pcre

我有一些字符串,我想使用正则表达式来提取任何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标签在大括号之外,我不感兴趣。

3 个答案:

答案 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, ''));