全局忽略某些字符

时间:2010-05-19 06:51:31

标签: javascript regex

认为'数字中的_不会改变该数字的值,所以1000 == 1_000 == 10_00。

问题:给定的数字如 1_244_23 1412_2 1_1111等...,我如何判断该集合中是否出现某个数字?例如:1244_23 yes,11_111 yes,1412_1 no。

如何使用正则表达式来解决这个问题?我的意思是,如果我能告诉正则表达式引擎在匹配时忽略这些'_',那么这个问题就变得微不足道了?我怎么能这样做?

2 个答案:

答案 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。

相关问题