我有一个看起来像这样的输入流:
"ignore this" blah "ignore this" blah "capture this" keyword "ignore this" blah
我想捕获capture this
,即keyword
之前引号中的文本。
我尝试了正则表达式(?:\"(.*)\" )(?=keyword)
,但这捕获了keyword
之前引号之前的所有内容。我该如何直接在keyword
之前的引号中捕获文本?
答案 0 :(得分:2)
模式(?:\"(.*)\" )(?=keyword)
匹配第一个"
,然后匹配最后一个出现,其中双引号后跟一个空格,后跟keyword
,因为点也匹配双引号。 / p>
请注意,在该模式中,可以忽略非捕获组(?:
,而不必对"
进行转义。
您可以使用negated character class来匹配除"
以外的任何字符
该值在第一个捕获组中。
"([^"]+)"(?= keyword)
说明
"
字面上匹配(
捕获组
[^"]+
匹配除"
以外的任意字符1倍以上)
关闭群组"(?= keyword)
匹配"
并断言右边直接是空格和keyword
使用Javascript的示例
const regex = /"([^"]+)"(?= keyword)/g;
const str = `"ignore this" blah "ignore this" blah "capture this" keyword "ignore this" blah`;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[1]);
}
答案 1 :(得分:0)
尝试使用环视断言
var input = `"ignore this" blah "ignore this" blah "capture this" keyword "ignore this" blah`;
var result = /(?<=\")[A-Za-z0-9\ ]*(?=\" keyword)/i.exec(input)
console.log(result);
此处(?<=\")
查找紧随"
之后的内容,(?=\" keyword)
查找紧随" keyword
之后的内容。
有关此处的零零位断言的更多信息: https://www.regular-expressions.info/lookaround.html
答案 2 :(得分:0)
您要作为结果捕获或返回的字符串在双引号之间,后跟一个特定的关键字。只需找到与"
匹配的模式,然后再匹配非"
的任何内容,然后再匹配" keyword
。
var input = `"ignore this" blah "ignore this" blah "capture this" keyword "ignore this" blah`;
var result = /(?=\")?[^"]+(?=\"\s*keyword)/i.exec(input)
console.log(result);