我有一个字符串,我想从使用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" 之内?
答案 0 :(得分:2)
我喜欢与(a*, b*) within 20
部分匹配的正则表达式。
你可以尝试
\[\[.*?(\(a\*, b\*\) .*?)\]\]
以下是regex101
上的演示 注意:您可以使用\w
或[a-z]
根据您的需要更加精确,而不是a
和b
\[\[.*?(\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
\] # ']'
\] # ']'