[英]REGEX for finding the word that doesn't start with space or end with space
考虑以下字符串:
"abc123 123 123abc abc123abc"
现在我想选择不属于自己的123。 所以所有数字都是数字\\s\\d+\\s+
我已经尝试了很多东西,但没有......
所以这是解决您问题的简短方法:
\B123|123\B
\\B
匹配非单词边界。 因此,在123
之前或之后必须找到一个单词的一部分。
这将匹配所有123而没有独立的那个。
编辑1:
如果123
代表一系列数字 , abc
代表一系列字母,你可以尝试
[a-zA-Z]\d+|\d+[a-zA-Z]
不幸的是,对于此解决方案,您必须创建匹配组以检索数字。 这是正则表达式
[a-zA-Z](\d+)|(\d+)[a-zA-Z]
以下正则表达式将适用于特定情况:
/\w+123\w+|\w+123|123\w+/
如:
"abc123 123 123abc abc123abc".match(/\w+123\w+|\w+123|123\w+/g);
将输出:
["abc123", "123abc", "abc123abc"]
假设abc
和123
都是混淆,那么你需要在正则表达式中改变123来定位你的相关案例。
我的建议是:
[^\s\d]+\d+[^\s\d]*|[^\s\d]*\d+[^\s\d]+
详细说明:
[^\s\d]+ // Represents one or more non-whitespace and non-digit character
\d+ // Represents one or more digit (your required sequence)
[^\s\d]* // Represents zero or more non-whitespace and non-digit characters
| // Represents logical OR operation
[^\s\d]* // Zero or more non-WS and non-digit
\d+ // Your sequence
[^\s\d]+ // One or more non-WS and non-digit
注意: [^\\s\\d]*
条目用于在abc123abc
情况下捕获整个组。
UPD:在当前版本中,从字符串abc13 124233 356abc abc12333abc
我正则表达式将匹配abc13
, 356abc
和abc12333abc
。
还用Rubular测试。
如果您要查找的是数字串作为不同的单词,则regexp可以使用单词边界。 例如:
$ echo "abc123 123 123abc abc123abc" | egrep -o '\<[[:digit:]]+\>'
123
或许是一个更好的例子:
$ echo "abc123 234 345abc abc456abc" | egrep -o '\<[[:digit:]]+\>'
234
现在,我不是一个JavaScript人。 但是如果像@wumpz似乎暗示的那样,JavaScript的正则表达式解析器使用\\B
代替\\<
和\\>
那么\\B[[:digit:]]+\\B
的正则表达似乎可以解决问题,假设JavaScript理解类。
可能你正在寻找正则表达式中的先行断言和lookbehind断言。
[^\s]*(?<!\s)123(?!\s)[^\s]*
will match abc123abc only
但坏消息是javascript正则表达式不支持lookahead / lookbehind断言
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.