如何解决如何从 RegExp 中由 OR 运算符分隔的多个单词首先匹配更大的单词?使用 java 脚本
我需要一个正则表达式来首先匹配后面带有“px”的数字,然后匹配后面带有“p”的剩余数字。
我想用“*”字符替换字符串的一部分,即数字或带有“p”或“px”的数字。
我尝试过的正则表达式 /\d+(\.\d+)?(p|px)?/g
,但它不匹配 'px' 它唯一匹配的 'p'。
- 示例字符串,在对其进行任何替换之前。:12pxy...12py...12px...12ppx...12...12ypx
- 此处应替换的部分以粗体显示:12pxy...12py...12px...12ppx...12...12ypx
- 完成所有替换后的预期结果:*y...*y...*...*px...*...*ypx
我尝试的以下代码正在替换数字和“p”,而不是“px”。
str = "12pxy...12py...12px...12ppx...12...12ypx";
replaced_str = str.replace(/\d+(\.\d+)?(p|px)?/g,'*');
console.log(replaced_str);
// output is: *xy...*y...*x...*px...*...*ypx
// I wanted : *y...*y...*...*px...*...*ypx
解决方法
对于给定的示例,您可以匹配 1+ 个数字,后跟可选的 p 和可选的 x。
\d+p?x?
还匹配小数部分:
\d+(?:\.\d+)?p?x?
模式匹配:
-
\d+
匹配 1 个以上的数字 -
(?:\.\d+)?
匹配一个可选的小数部分 -
p?x?
匹配可选的p
和可选的x
并替换为 *
str = "12pxy...12py...12px...12ppx...12...12ypx";
replaced_str = str.replace(/\d+p?x?/g,'*');
console.log(replaced_str);
输出
*y...*y...*...*px...*...*ypx
,
它不匹配 'px' 它唯一匹配的 'p'
那是因为 x
交替没有锚定在模式末尾,第一个选择总是获胜,因为 forall
是 x
的前缀,见"Remember That The Regex Engine Is Eager"。
你可以做的是交换替代品,P
,或者重写"assets": [
"src/favicon.ico",{
"glob": "**/*","input": "src/assets","output": "/assets/",}
],
。此外,您可以在此处使用非捕获组以避免与捕获 mmemory 分配相关的额外开销:
<img src="/assets/images/product/weather-hood/image.jpg" ...>
参见regex demo。 详情:
-
(p|px)?
- 一位或多位数字 -
p
- 一个点和一个或多个数字的可选出现 -
px
- 可选出现的(px|p)?
后跟可选的(?:px?)?
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。