Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regex-以不同的顺序和状态从字符串中捕获属性_Javascript_Regex - Fatal编程技术网

Javascript Regex-以不同的顺序和状态从字符串中捕获属性

Javascript Regex-以不同的顺序和状态从字符串中捕获属性,javascript,regex,Javascript,Regex,我正在尝试用JavaScript创建一个正则表达式,它将匹配下面的每一行,并且还将image\u path、caption和alt的值分别捕获为$1、2和$3 {{} {{{} {{{} {{} {{} {{}既然您已经标记了Javascript,我假设您需要一个与JS兼容的模式。我还要假设每个文本都在一行上 快速细分 ^-从生产线开始 (?=.*\b短代码/响应映像\b)-正向前瞻,以在线路上查找“短代码/响应映像” (?=(?:.*image_path=“([^”]+)”)-正向前瞻,

我正在尝试用JavaScript创建一个正则表达式,它将匹配下面的每一行,并且还将
image\u path
caption
alt
的值分别捕获为$1、2和$3

{{}
{{{}
{{{}
{{}
{{}

{{}
既然您已经标记了Javascript,我假设您需要一个与JS兼容的模式。我还要假设每个文本都在一行上

快速细分

  • ^-从生产线开始
  • (?=.*\b短代码/响应映像\b)-正向前瞻,以在线路上查找“短代码/响应映像”
  • (?=(?:.*image_path=“([^”]+)”)-正向前瞻,在非捕获组内的行上查找image_path=,该非捕获组是可选的,并且有一个组与我们想要的组相匹配,即组$1
  • 由于我们使用了Lookaheads,因此上面的操作将确保光标仍然位于行的开头,因此我们可以对“caption=”和“alt=”重复该过程
  • 由于我们现在有3个连续的组按顺序排列,同时使用lookaheads来确定匹配项是否存在,而它们是可选的,因此将为任何匹配项创建组
如有需要,请参阅链接以获取更详细的解释

就提供空组而言,JS的精确输出相当困难

因此,我还包括一个PCRE(不适用于Javascript)版本,以防您可以使用它。此模式利用了一个和一个空组,因此如果参数项不匹配,它将使空组与|(或)匹配

ie:
image_path=“([^”]+)“|()”
-如果image_path=“([^”]+)”不匹配,则匹配()空组以创建空/空组项,并使用与上一示例类似的其他匹配词重复该操作


您可以选择独立于顺序。请显示您当前的尝试,以了解您的困境。谢谢。这在捕获3个组的值方面非常有效,具有不同的顺序和状态。唯一的问题是,当我使用substrustion时,始终附加完整的字符串。例如
$1-$2-
返回
/image.jpg--A caption--{{{}
用于第一行。是否可以修改它以仅返回组-即
/image.jpg--标题--
?嗨,AJP,很高兴听到这一点。在替换方面,如果您想清除整个字符串,只需将
*$
添加到模式的末尾。由于光标仍在行的开头,这将选择所有t他在行上输入文本,并将其完全替换为您的替换。
^(?=.*\bshortcodes\/responsive-image\b)(?=(?:.*image_path="([^"]+)")?)(?=(?:.*caption="([^"]+)")?)(?=(?:.*alt="([^"]+)")?)
^(?=.*\bshortcodes\/responsive-image\b)(?=(?|.*image_path="([^"]+)"|()))(?=(?|.*caption="([^"]+)"|()))(?=(?|.*alt="([^"]+)"|()))