繁体   English   中英

REGEX用于查找不以空格开头或以空格结尾的单词

[英]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

正则表达式可视化

Debuggex演示

\\B匹配非单词边界。 因此,在123之前或之后必须找到一个单词的一部分。

这将匹配所有123而没有独立的那个。

编辑1:

如果123代表一系列数字abc代表一系列字母,你可以尝试

[a-zA-Z]\d+|\d+[a-zA-Z]

正则表达式可视化

Debuggex演示

不幸的是,对于此解决方案,您必须创建匹配组以检索数字。 这是正则表达式

[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"]

假设abc123都是混淆,那么你需要在正则表达式中改变123来定位你的相关案例。

我的建议是:

[^\s\d]+\d+[^\s\d]*|[^\s\d]*\d+[^\s\d]+

正则表达式可视化

Debuggex演示

详细说明:

[^\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我正则表达式将匹配abc13356abcabc12333abc

还用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

正则表达式可视化

Debuggex演示

但坏消息是javascript正则表达式不支持lookahead / lookbehind断言

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM