我有一个模式,我想从字符串链接捕获:
**THIS NO** **THIS NO** **THIS NO** **I SAID YES** **THIS NO**
我想要捕获文字I SAID YES
。由于我必须使用的是**
和YES
我尝试了一个正则表达式,但它从第一个**
返回匹配,而不是我的模式之前的那个,请参阅Regex101下面:
答案 0 :(得分:0)
如下:
/[A-Z]\s*[A-Z]*(?=\sYES)/
这使用前瞻来捕获直接位于单词YES
之前的两个大写单词。
每个单词用空格分隔,上面的正则表达式忽略YES
之前的空格。
const string = '**THIS NO** **THIS NO** **THIS NO** **I SAID YES** **THIS NO**';
console.log(string.match(/[A-Z]\s*[A-Z]*(?=\sYES)/));

这也可以看作 here 。
答案 1 :(得分:0)
您使用的正则表达式\*\*(?P<Capture>.*?)YES\*\*
匹配**
,然后匹配任何非贪婪.*?
字符,直到遇到YES
为止。这将匹配:
**THIS NO** **THIS NO** **THIS NO** **I SAID YES**
您可以更新您的正则表达式以匹配**
,并且在该匹配后不是* [^*]+
,直到您遇到YES
。
这将匹配组I SAID YES
Capture
<强>解释强>
\*\*
匹配** (?P<Capture>[^*]+YES)
捕获群组并且不匹配*一次或多次\*\*
匹配**