组合多个/^(xyz)/regex表达式
Combine multiple /^(xyz)/ regex expressions
我有点纠结于为以下内容找出正确的正则表达式语法:
考虑这个输入:
var input = "sdkfjhd board hjh alabama jdjd bat";
与匹配
var arr = ["Board of Pre University Education", "Alabama Autonomous Board", "Batman Gotham Bruce", "Superman KalEl Clark", "Board of Whatever"];
var split_input = input.split(' ').join(")|^(");
var re = new RegExp("^(" + split_input + ")", "i"); // /^(sdkfjhd)|^(board)|^(hjh)|^(alabama)|^(jdjd)|^(bat)/i
我认为,如果左条件为true,则将多个^(xyz)表达式与|运算符组合将起到OR运算符短路的作用,并且首先匹配以"sdkfjhd"开头的任何项,如果找到,则仅匹配以"sdkfjhd"开头的项。。否则,继续下一个字符串"board",依此类推。。所以下面的代码
var result = $.grep(arr, function( a ){
return re.test(a);
});
产生以下输出:
["Board of Pre University Education", "Alabama Autonomous Board", "Batman Gotham Bruce", "Board of Whatever"]
我只想它是
["Board of Pre University Education", "Board of Whatever"]
因此,如果任何左侧表达式首先找到匹配项,我将尝试找到一种跳过所有右侧表达式的方法。考虑相同的输入字符串"sdkfjhd board hjh alabama jdjd bat"
…'sdkfjhd"不会产生任何结果,所以它转到"板",板找到匹配项并产生2个结果:["Board of Pre University Education", "Board of Whatever"]
。现在,当它找到1个或多个匹配时,它不应该移动到下一个表达式,即"hjh"、"labama"、"jdjd"或"batman"。希望它更清楚,谢谢!
如有任何帮助,我们将不胜感激。谢谢:)!
附言:这是一把小提琴http://jsfiddle.net/4h26vLq8/40/
正则表达式可以正常工作。|起OR的作用,但您不匹配单词边界。因此:
- 大学预科教育委员会
- 阿拉巴马州自治委员会
- 蝙蝠侠哥谭布鲁斯//蝙蝠比赛
- 超人卡莱尔·克拉克//不匹配
- 董事会
new RegExp
中的第二个参数"i"表示不区分大小写的正则表达式。
您可以使用单词边界''b只匹配整个单词:
var split_input = input.split(' ').join("''b)|^(''b");
var re = new RegExp("^(''b" + split_input + "''b)", "i");
对于单词general match,而不仅仅是第一个单词,您可以从正则表达式中删除^:
var split_input = input.split(' ').join("''b)|(''b");
var re = new RegExp("(''b" + split_input + "''b)", "i");
编辑:经过一些澄清评论后:它应该只从输入字符串中命中的第一个单词中获取匹配项:
var input = "sdkfjhd batman hjh jdjd alabama board";
var arr = ["Board of Pre University Education", "Alabama Autonomous Board", "Batman Gotham Bruce", "Superman KalEl Clark", "Board of Whatever"];
var split_input = input.split(/'s+/);
var result = [];
for (var i = 0; i <split_input.length; i++){
var exp = new RegExp('^''b'+split_input[i]+'''b', 'ig');
for (var n = 0; n < arr.length; n++){
if (exp.test(arr[n])){
result.push(arr[n]);
}
}
if (result.length > 0)
break;
}
由于字符串中的"batman"与数组中的一个或多个项匹配,因此不应再继续使用下一个表达式,即"hjh"jdjd"alabama"board"。因此产生以下结果:
["Batman Gotham Bruce"]
您不需要为每个单词包含起始锚^
,您可以使用:
var arr = ["Board of Pre University Education", "Alabama Autonomous Board", "Batman Gotham Bruce", "Superman KalEl Clark", "Board of Whatever"];
var input = "sdkfjhd board hjh alabama jdjd bat";
var split_input = input.split(' ').join("|");
var re = new RegExp("^(" + split_input + ")''b", "i");
console.log(re);
//=> /^(sdkfjhd|board|hjh|alabama|jdjd|bat)'b/i
var result = $.grep(arr, function( a ){
return re.test(a);
});
console.log( result );
//=> ["Board of Pre University Education", "Alabama Autonomous Board", "Board of Whatever"]
JSFiddle演示
- 加入Regex表达式数组
- Regex表达式无法用于密码验证
- regex表达式不适用于验证信用卡到期信息
- Regex表达式与#{}中的名称匹配,以供模板使用
- Regex表达式,用于替换两个字符(包括字符)之间的字符串
- 组合多个/^(xyz)/regex表达式
- jquery regex表达式警报框
- 使用带有.match Regex表达式的变量的JavaScript
- Javascript split() Regex 表达式在 Chrome 中返回不需要的逗号
- Regex表达式不起作用
- Regex表达式以清除无效的JSON
- Regex表达式以匹配URL
- 撇号的Regex表达式
- new Reg()有没有一种方法可以让regex表达式只接受整数和可选的度量单位px
- 为JavaScript编写这个RegEx表达式的最佳方法是什么?
- 验证用户提供的Regex表达式作为表单文本字段的输入
- C#等价于JS RegEx表达式
- Regex表达式以匹配时间的情况AM/PM";下午12:30"
- 使用Regex表达式替换所有逗号和方括号
- JavaScript Regex表达式,用于从html注释中提取数据