我试图创建一个正则表达式,匹配8个字符的单词,其中包含至少3个数字或'%'符号和单词后的空格的示例。
以下字符串应匹配:
- 'ab1d2f3h '
- 'ab%d2f3h '
- 'ab%d%f3h '
- 'ab%d%f%h '
到目前为止,我的正则表达式看起来像这样:
const string = 'this word ab1d2f3h needs to go, but not this word abcdefgh %%%'.replace(/(?=(?:\D*(\d|%)){3})(\w|%){8}\s/g, '%%%%%%%% ')
如果我从字符串中删除'%%%',它会工作- 'ab 1d 2f 3 h'被替换。但是,如果'%%%'出现在字符串中,它也会替换'abcdefhg ',这是我不希望发生的。
有人知道正确的正则表达式吗?
2条答案
按热度按时间c0vxltue1#
如果在使用模式的环境中支持后向Assert:
说明
(?<!\S)
正向后看,向左Assert空白边界(?=\S{8}\s)
正向前看,Assert8个非空格字符,后跟一个空格字符(注意,它也可以匹配换行符)(?:[^\s\d%]*[%\d]){3}
重复3次,匹配除数字或%
以外的任何非空格字符,然后匹配数字或%
\S*
匹配可选的非空白字符Regex demo
或者使用捕获组:
Regex demo
在替换中,使用第一个捕获组来保留前导空格字符。
pxq42qpu2#
我问了ChatGPT,它回答了我的问题:
您可以使用以下正则表达式来匹配包含至少3个数字或符号“%”示例的8个字符的单词:
说明:
注意,这个正则表达式假设字符串中没有空格或其他非单词字符。如果有,您可能需要修改正则表达式来处理它们。