考虑以下字符串:
"abc123 123 123abc abc123abc"
现在我想选择不属于自己的123。所以所有数字都是数字\s\d+\s+
我尝试了很多东西,但没有......
答案 0 :(得分:4)
所以这是解决问题的简短方法:
\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]
答案 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"]
假设abc
和123
都是混淆,那么您需要在正则表达式中更改123来定位您的相关案例。
答案 2 :(得分:1)
我的建议是:
[^\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进行了测试。
答案 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
但坏消息是javascript正则表达式不支持lookahead / lookbehind断言