gpt4 book ai didi

javascript - 组合多个/^(xyz)/正则表达式

转载 作者:行者123 更新时间:2023-12-03 10:44:38 25 4
gpt4 key购买 nike

我在尝试找出以下正确的正则表达式语法时遇到了一些困难:

考虑这个输入:

var input = "sdkfjhd board hjh alabama jdjd bat";

要匹配

var arr = [“大学预科教育委员会”、“阿拉巴马自治委员会”、“ bat 侠哥谭布鲁斯”、“超人卡尔埃尔·克拉克”、“任何委员会”];

var split_input = input.split(' ').join(")|^(");
var re = new RegExp("^(" + split_input + ")", "i"); // /^(sdkfjhd)|^(board)|^(hjh)|^(alabama)|^(jdjd)|^(bat)/i

我认为将多个 ^(xyz) 表达式与 | 结合起来如果左侧条件为 true,则运算符将作为 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'不会产生任何结果,因此它移动到'board',board找到匹配并产生2个结果:[“大学预科教育委员会”,“任何委员会”]。现在,当它找到 1 个或多个匹配项时,它不应移动到下一个表达式,即“hjh”、“alabama”、“jdjd”或“batman”。希望更清楚,谢谢!

对此的任何帮助将不胜感激。谢谢:)!

PS:这是一个 fiddle http://jsfiddle.net/4h26vLq8/40/

最佳答案

正则表达式按其应有的方式工作。 | 的 |与 OR 一样工作,但不匹配单词边界。因此:

  1. 大学预科教育委员会//​​按委员会进行比赛
  2. 阿拉巴马州自治委员会//​​阿拉巴马州和委员会的比赛
  3. bat 侠哥谭布鲁斯// bat 比赛
  4. 超人 KalEl Clark//不匹配
  5. Board of Everything//按董事会匹配

新 RegExp 中的第二个参数“i”表示不区分大小写的正则表达式。

您可以使用单词边界\b 仅匹配整个单词:

var split_input = input.split(' ').join("\\b)|^(\\b");
var re = new RegExp("^(\\b" + split_input + "\\b)", "i");

对于单词一般匹配而不仅仅是第一个单词,您可以从正则表达式中删除 ^:

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"]

关于javascript - 组合多个/^(xyz)/正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com