javascript - 匹配 javascript 中的正则表达式
问题描述
我试图从以下字符串中提取日期,但无济于事。
const strs = [
`X
March 17th 2011
`,
`X
2011
`,
`X
March
2011
`,
];
console.log(strs.map(s =>
s.match(/X\s+([a-zA-Z]+?\s*[a-zA-Z0-9]+)?\s*(\d+)/))
);
问题在于第一场比赛,目前是
[
"X\n March 17",
"March",
"17"
]
虽然它应该是
[
"X\n March 17th 2011",
"March",
"17th",
"2011"
]
任何帮助,将不胜感激。
解决方案
您可以使用
/X(?:\s+([a-zA-Z]+))?(?:\s+([a-zA-Z0-9]+))?\s+(\d+)/g
请参阅正则表达式演示。详情:
X
- 一个X
字符(?:\s+([a-zA-Z]+))?
- 一个或多个空格 (\s+
) 和一个或多个 ASCII 字母的可选序列(捕获到第 1 组)(?:\s+([a-zA-Z0-9]+))?
- 一个或多个空格 (\s+
) 和一个或多个 ASCII 字母或数字的可选序列(捕获到第 2 组)\s+
- 1+ 个空格(\d+)
- 第 3 组:一位或多位数字
请参阅下面的 JavaScript 演示:
const strs = ["X\n March 17th 2011\n", "X\n 2011\n", "X\n March\n 2011\n"];
const rx = /X(?:\s+([a-zA-Z]+))?(?:\s+([a-zA-Z0-9]+))?\s+(\d+)/;
strs.forEach(s =>
console.log( s.match(rx) )
);
或者,获取完整值:
const strs = ["X\n March 17th 2011\n", "X\n 2011\n", "X\n March\n 2011\n"];
const rx = /X(?:\s+[a-zA-Z]+)?(?:\s+[a-zA-Z0-9]+)?\s+\d+/g;
strs.forEach(s =>
console.log( s.match(rx).map(x => x.substr(1).trim().replace(/\s+/g, ' ') ))
);
推荐阅读
- perl - 如何拆分具有特定数字的一组字符串
- laravel - 在 Laravel install 中通过 NPM 安装 Bootstrap
- python - 未调用 GoalEnv 子类重置
- javascript - 如果表单未填写,则禁用提交按钮并更改按钮的 CSS
- javascript - 将外部反应加载到 html 文件中
- python - 使用子图时不出现 X 轴标签
- django - 在 Python 中,如何提取 URL 的域部分?
- javascript - 如何在 Selenium IDE 中执行书签 javascript?
- flutter - Flutter 中基于当前状态显示 Widget
- python-3.x - 游戏
尝试生成超过 1 个敌人时,对象不是可调用对象