我希望将JavaScript中的输入字符串与0或2个连续短划线匹配,而不是1,即不是范围。
如果字符串是:
-g:"apple" AND --projectName:"grape"
:它应与--projectName:"grape"
匹配。-g:"apple" AND projectName:"grape"
:它应与projectName:"grape"
匹配。-g:"apple" AND -projectName:"grape"
:它不匹配,即返回null。--projectName:"grape"
:它应与--projectName:"grape"
匹配。projectName:"grape"
:它应与projectName:"grape"
匹配。-projectName:"grape"
:它不匹配,即返回null。为了简化这个问题,考虑到这个例子,RE应该匹配前面的0或2短划线以及接下来的任何内容。我会弄明白其余的。问题仍然归结为匹配0或2短划线。
-{0,2}
匹配0,1,2破折号。-{2,}
匹配2个或更多短划线。-{2}
仅匹配2个破折号。如何匹配0或2次出现?
答案 0 :(得分:4)
<强>答案强>
如果你将&#34;类似单词&#34;分开空间上的模式,您可以使用此正则表达式,您想要的值将在第一个捕获组中:
(?:^|\s)((?:--)?[^\s-]+)
\s
是任何空格字符(制表符,空格,换行符......)[^\s-]
除了类似空格的字符或-
问题再次是锚定正则表达式,以便相关部分不是完全可选的:这里锚^
或强制空白\s
播放此作用。
我们想做什么
基本上你想检查你的表达式(两个破折号)是否存在,所以你可以使用?
运算符:
(?:--)?
&#34;两个或没有&#34;,(?:...)
是非捕获组。
避免混淆
你想要匹配&#34;零或两个破折号&#34;,所以如果这是你的整个正则表达式,它将始终找到一个匹配:在一个空字符串中,{{1} },在--
中,-
...这些字符串中匹配的内容将是一个空字符串,但正则表达式将返回匹配。
这是误解的常见原因,因此请记住如果你的正则表达式中的所有内容都是可选的,那么它总能找到匹配。
如果你只想在整个字符串由零或两个破折号组成时返回一个匹配项,你需要锚定正则表达式:
foobar
^(?:--)?$
分别匹配字符串的开头和结尾。
答案 1 :(得分:2)
a(-{2})?(?!-)
这是使用&#34; a&#34;举个例子。这将匹配a后跟可选的2个破折号。
修改强>
根据你的例子,这应该有效
(?<!-)(-{2})?projectName:"[a-zA-Z]*"
编辑2: 我认为Javascript在lookbehinds方面存在问题。
试试这个:
[^-](-{2})?projectName:"[a-zA-Z]*"