首页 > 解决方案 > 具有多个标准的键值模式,使用正向外观开销

问题描述

我尝试格式化包含键值对的文本(我有多个匹配条件)。我尝试像这样的正面外观开销,但我应该匹配一个确切的单词作为值

/(?=firstname|lastname)(.*)/gi

搜索类似这样的文字

khjkhkj firstname: 'hello' jlkjkjkl
uhziuuj firstName 'hello' jkljljkkj
ugujgjg firstname='hello' oljkjlkjl
hkhjhkj firstName = 'hello' jljlljj
hjkhjkh firstname = hello jljkkljlk
khjkhkj lastname: 'world' jlkjkjkl
uhziuuj lastname 'world' jkljljkkj
ugujgjg lastName='world' oljkjlkjl
hkhjhkj lastname = 'world' jljlljj
hjkhjkh lastName = world jljkkljlk

标签: javascriptregex

解决方案


您可以使用

/(?:fir|la)stname[\s:=']*([^'\s]*)/gi

请参阅正则表达式演示。您需要的值在第 1 组中。\b如有必要,请在 之前添加一个单词 bounary (?:fir|la)

细节

  • (?:fir|la)- 要么firla
  • stname- 文字文本
  • [\s:=']*- 0 个或多个空格,:,='
  • ([^'\s]*)- 捕获组 1:0 个或更多字符,而不是'空格。

参见 JS 演示:

var s = "khjkhkj firstname: 'hello' jlkjkjkl\nuhziuuj firstName 'hello' jkljljkkj\nugujgjg firstname='hello' oljkjlkjl\nhkhjhkj firstName = 'hello' jljlljj\nhjkhjkh firstname = hello jljkkljlk\nkhjkhkj lastname: 'world' jlkjkjkl\nuhziuuj lastname 'world' jkljljkkj\nugujgjg lastName='world' oljkjlkjl\nhkhjhkj lastname = 'world' jljlljj\nhjkhjkh lastName = world jljkkljlk";
var rx = /(?:fir|la)stname[\s:=']*([^'\s]*)/gi;
var m, res = [];
while (m = rx.exec(s)) {
    res.push(m[1]);
}
console.log(res);

或者,使用matchAll

const s = "khjkhkj firstname: 'hello' jlkjkjkl\nuhziuuj firstName 'hello' jkljljkkj\nugujgjg firstname='hello' oljkjlkjl\nhkhjhkj firstName = 'hello' jljlljj\nhjkhjkh firstname = hello jljkkljlk\nkhjkhkj lastname: 'world' jlkjkjkl\nuhziuuj lastname 'world' jkljljkkj\nugujgjg lastName='world' oljkjlkjl\nhkhjhkj lastname = 'world' jljlljj\nhjkhjkh lastName = world jljkkljlk";
const rx = /(?:fir|la)stname[\s:=']*([^'\s]*)/gi;
let results = [...s.matchAll(rx)];
console.log(Array.from(results, m => m[1]));

另一种选择是'...'在单词和标点符号之后捕获或一串非空白字符:

var s = "khjkhkj firstname: 'hello' jlkjkjkl\nuhziuuj firstName 'hello' jkljljkkj\nugujgjg firstname='hello' oljkjlkjl\nhkhjhkj firstName = 'hello' jljlljj\nhjkhjkh firstname = hello jljkkljlk\nkhjkhkj lastname: 'world' jlkjkjkl\nuhziuuj lastname 'world' jkljljkkj\nugujgjg lastName='world' oljkjlkjl\nhkhjhkj lastname = 'world' jljlljj\nhjkhjkh lastName = world jljkkljlk";
var rx = /(?:fir|la)stname[=:\s]+('([^']*)'|\S+)/gi;
var m, res = [];
while (m = rx.exec(s)) {
    if (m[2] !== undefined) {
        res.push(m[2]);
    } else {
        res.push(m[1]);
    }
}
console.log(res);

请参阅此正则表达式演示


推荐阅读