合并Regex以匹配String的变体

时间:2014-06-25 14:44:59

标签: javascript regex

我有一个字符串,我想从使用javascript中提取一些内容。该字符串可以有多种形式,如下所示:

[[(a*, b*) within 20]] or [[...(a*, b*) within 20]]其中" ..."可能存在也可能不存在。

我想要一个与20" 部分内的"(a *,b *)相匹配的正则表达式。

/\[\[(.*?)\]\]/.exec(text)[1]将匹配[[(a*, b*) within 20]]

/([^\.]+)\]\]/.exec(text)[1]将匹配[[...(a*, b*) within 20]]

如何合并这些内容,以便两个版本的文本都匹配"(a *,b *)在20" 之内?

3 个答案:

答案 0 :(得分:2)

我喜欢与(a*, b*) within 20部分匹配的正则表达式。

你可以尝试

\[\[.*?(\(a\*, b\*\) .*?)\]\]

以下是regex101

上的演示

注意:您可以使用\w[a-z]根据您的需要更加精确,而不是ab

\[\[.*?(\w\*, \w\*\) .*?)\]\]

这里,转义字符\用于转义正则表达式模式的特殊字符,例如。 [[]] *()

答案 1 :(得分:2)

您可以使用此正则表达式:

var m = s.match(/\[\[.*?(\([^)]*\).*?)\]\]/);
if (m)
    console.log(m[1]);
    // (a*, b*) within 20 for both input strings

答案 2 :(得分:1)

您可以使用以下内容来匹配这两种变体。

\[\[[^(]*(\([^)]*\)[^\]]*)\]\]

<强>解释

\[            #   '['
\[            #   '['
[^(]*         #   any character except: '(' (0 or more times)
(             #   group and capture to \1:
  \(          #     '('
  [^)]*       #      any character except: ')' (0 or more times)
  \)          #     ')'
  [^\]]*      #     any character except: '\]' (0 or more  times)
)             #   end of \1
\]            #   ']'
\]            #   ']'

Working Demo