认为'数字中的_不会改变该数字的值,所以1000 == 1_000 == 10_00。
问题:给定的数字如 1_244_23 1412_2 1_1111等...,我如何判断该集合中是否出现某个数字?例如:1244_23 yes,11_111 yes,1412_1 no。
如何使用正则表达式来解决这个问题?我的意思是,如果我能告诉正则表达式引擎在匹配时忽略这些'_',那么这个问题就变得微不足道了?我怎么能这样做?
答案 0 :(得分:2)
不要让它变得更复杂。
var baseStr = "1_244_23 1412_2 1_1111";
var testFor = "1244_23";
var contains = !!new RegExp("\\b" + testFor.replace(/_/g,"") + "\\b").exec(baseStr.replace(/_/g,""));
答案 1 :(得分:1)
您可以创建一个正则表达式,允许在任何位置使用下划线:
var input = '1_244_23 1412_2 1_1111';
if (/(^|\s)1_?1_?1_?1_?1(\s|$)/.exec(input) != null) {
...
}
如果要从字符串创建正则表达式:
var input = '1_244_23 1412_2 1_1111';
var number = '11_111';
var re = new Regex('(^|\s)'+number.replace(/_/g, '').replace(/\B(.)/g, '_?$1')+'(\s|$)');
if (re.exec(input) != null) {
...
}
我将(^ | \ s)和(\ s | $)添加到正则表达式中以匹配数字的开头和结尾,因此像111这样的数字不会得到误报匹配21113。