我有一个字符串,包括但不限于
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的整数?
答案 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-9]
将与1
的第一个10
匹配,正则表达式永远不会到达[10]
部分。
其次,[10]
将与0
匹配,因为正则表达式中的[]
匹配括号内的任何字符 - 因此[10]
将为true
1
或0
。
你想要做的是匹配范围1-9
或VALUE 10
,首先放置10
,如下所示:
value = string.match(/thumbnails-per-row-(10|[1-9])/)[1]
答案 2 :(得分:1)
你可以这样做:
/^thumbnails-per-row-(?:(?:[1-9]-)|(?:10-))text$/
使用相同的方法,您可以展开以匹配1-20:
/^thumbnails-per-row-(?:(?:[1-9]-)|(?:1[0-9]-)|(?:20-))text$/
依旧......
正如评论中所述(感谢狼),你可以将-
移出内部群体:
^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]