Javascript regexp匹配以下短语

时间:2015-06-03 21:58:31

标签: javascript regex

我有一个字符串,包括但不限于

string = 'thumbnails-per-row-10-text'

我想在thumbnails-per-row-之后选择一个数字,它始终是从1到10的整数。

我到目前为止的正则表达式是:

value = string.match(/thumbnails-per-row-([1-9]|[10])/)[1]

然而,这并不像我预期的那样有效,因为它会匹配0但只匹配' 1'的值。当我希望收到' 10'。

的价值时

如何调整正则表达式以正确返回1-10的整数?

4 个答案:

答案 0 :(得分:4)

您的代码无效,因为1匹配[1-9],正则表达式很满意并结束搜索。将10放在第一位,正则表达式将按照指定的顺序尝试替代组合:

value = string.match(/thumbnails-per-row-(10|[1-9])/)[1] // Output: 10

修改: 如果您不想匹配该范围之外的值,请要求在该数字后紧跟第二个连字符。

value = string.match(/thumbnails-per-row-(10|[1-9])-/)[1]

答案 1 :(得分:2)

两件事:

  1. 首先,[1-9]将与1的第一个10匹配,正则表达式永远不会到达[10]部分。

  2. 其次,[10]将与0匹配,因为正则表达式中的[]匹配括号内的任何字符 - 因此[10]将为true 10

  3. 你想要做的是匹配范围1-9或VALUE 10,首先放置10,如下所示:

    value = string.match(/thumbnails-per-row-(10|[1-9])/)[1]
    

答案 2 :(得分:1)

你可以这样做:

/^thumbnails-per-row-(?:(?:[1-9]-)|(?:10-))text$/

Demo

使用相同的方法,您可以展开以匹配1-20:

/^thumbnails-per-row-(?:(?:[1-9]-)|(?:1[0-9]-)|(?:20-))text$/

Demo

依旧......

正如评论中所述(感谢狼),你可以将-移出内部群体:

^thumbnails-per-row-(?:(?:[1-9])|(?:1[0-9])|(?:20))-text$

答案 3 :(得分:0)

将正则表达式更改为以下内容: value = string.match(/([1-9]|[10])/)[1]

我在Rubular

中测试时有效

编辑:没关系。显然它在控制台中不起作用。您需要将其更改为: value = string.match(/thumbnails-per-row-(10|[1-9]|)/)[1]