正则表达式,以匹配数字,如果字符不是前导和尾随字符

时间:2014-04-25 07:43:59

标签: regex

只要在{}之间找不到数字,我就需要匹配数字。

示例:

{1}  - should not match  
1 - should match
2 - should match
{91} - should not match
3 - match
0 - match
{1212} - should not match

我写了这个(?!{)[\d](?!})

并且正确匹配{}之外的这些数字但是当{}中的数字超过1位时,例如{123},那么它匹配12排除最后一位数。

7 个答案:

答案 0 :(得分:3)

你最好选择:

\d+(?![^{]*})

<强> 说明:

\d+           # Any digits
(?![^{]*})    # Negative lookahead - demonstrating to not within curly braces 

<强> Live demo

答案 1 :(得分:3)

如果您还希望排除只在一侧有花括号的数字,例如{123123},那么您可以使用以下正则表达式(负面的后置和负面)使用前瞻):

(?<![{\d])\d+(?![}\d])

Regular expression visualization

Debuggex Demo

如果您想要包含仅在一侧有花括号的数字,您可以使用条件:

(?<![{\d])\d+(?![}\d])|(?<={)\d+(?![}\d])|(?<![{\d])\d+(?=})

Regular expression visualization

Debuggex Demo

答案 2 :(得分:2)

(我在此示例中使用了javascript)

这个简单的正则表达式应该准确显示你不想要的内容,所以只需检查它是否与这个正则表达式不匹配:

var strings = ['{1}', '1', '2', '{{91}', '3', '0', '{1212}'];
strings.map(function (str) {
    return !str.match(/(\{\d+\})/); 
}); // returns [false, true, true, false, true, true, false]

答案 3 :(得分:1)

以下正则表达式将会这样做:

^(?!={)(\d+)(?!=})$^(?!{)(\d+)(?!})$

{1}
1          Match
2          Match
{91}
3          Match
0          Match
{1212}

Demo

答案 4 :(得分:1)

说到regexp,简单就是美丽

^\d+$ 

没有前瞻或其他复杂的结构。它可能是最简单的正则表达式,可为您提供的样本输入产生正确的结果。

答案 5 :(得分:0)

你应该用这个:

^(?!\{)(\d+)(?!\})$

它是你的正则表达式,但我添加了\来逃避{和一个群组(\d+)来获取你想要的数据;)

答案 6 :(得分:0)

也许可以试试这个&#34;

^(?!{)\d+(?!=})$