在关键字前的引号中捕获文本

时间:2019-08-17 13:16:36

标签: regex

我有一个看起来像这样的输入流:

"ignore this" blah "ignore this" blah "capture this" keyword "ignore this" blah

我想捕获capture this,即keyword之前引号中的文本。

我尝试了正则表达式(?:\"(.*)\" )(?=keyword),但这捕获了keyword之前引号之前的所有内容。我该如何直接在keyword之前的引号中捕获文本?

3 个答案:

答案 0 :(得分:2)

模式(?:\"(.*)\" )(?=keyword)匹配第一个",然后匹配最后一个出现,其中双引号后跟一个空格,后跟keyword,因为点也匹配双引号。 / p>

请注意,在该模式中,可以忽略非捕获组(?:,而不必对"进行转义。

您可以使用negated character class来匹配除"以外的任何字符

该值在第一个捕获组中。

"([^"]+)"(?= keyword)

说明

  • "字面上匹配
  • (捕获组
    • [^"]+匹配除"以外的任意字符1倍以上
  • )关闭群组
  • "(?= keyword)匹配"并断言右边直接是空格和keyword

Regex demo

使用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);