javascript - 具有多个标准的键值模式,使用正向外观开销
问题描述
我尝试格式化包含键值对的文本(我有多个匹配条件)。我尝试像这样的正面外观开销,但我应该匹配一个确切的单词作为值
/(?=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
解决方案
您可以使用
/(?:fir|la)stname[\s:=']*([^'\s]*)/gi
请参阅正则表达式演示。您需要的值在第 1 组中。\b
如有必要,请在 之前添加一个单词 bounary (?:fir|la)
。
细节
(?:fir|la)
- 要么fir
或la
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);
请参阅此正则表达式演示。
推荐阅读
- r - 如何根据命名逻辑向量过滤数据框
- spring-boot - 微服务:跨服务验证和解耦?
- node.js - 如何排除不安全的 package.json 临时依赖项?
- c# - 是否有一种方法可以加入多个 linq 查询以根据用户选择获得结果?
- php - localhost:一些引导样式在 Chrome 中不起作用,但在 UC 浏览器中仍然有效
- java - 如何在 VSCode 中运行 Spring Boot maven 项目以及如何配置 Spring Boot Web 应用程序的基本 URL
- python - 如何在这样的数据框中获得每个月的平均值?
- blockchain - 无法使用 Ganache GUI 连接到 Truffle 或 testrpc
- mysql - 数据库中的整数溢出
- python - 使用minidom python解析xml元素属性