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

时间:2014-03-20 23:07:29

标签: javascript regex

考虑以下字符串:

"abc123 123 123abc abc123abc"

现在我想选择不属于自己的123。所以所有数字都是数字\s\d+\s+

我尝试了很多东西,但没有......

5 个答案:

答案 0 :(得分:4)

所以这是解决问题的简短方法:

\B123|123\B

Regular expression visualization

Debuggex Demo

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

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

修改1:

如果123代表数字序列abc代表字母序列,您可以尝试

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

Regular expression visualization

Debuggex Demo

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

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

答案 1 :(得分:3)

以下正则表达式适用于特定情况:

/\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来定位您的相关案例。

答案 2 :(得分:1)

我的建议是:

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

Regular expression visualization

Debuggex Demo

详细说明:

[^\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进行了测试。

答案 3 :(得分:0)

如果您要查找的是数字字符串作为不同的单词,则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了解课程。

答案 4 :(得分:0)

可能你正在寻找正则表达式中的先行断言和后瞻性断言。

[^\s]*(?<!\s)123(?!\s)[^\s]*

will match abc123abc only

Regular expression visualization

Debuggex Demo

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