Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在正则表达式中精确匹配初始词相同的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 如何在正则表达式中精确匹配初始词相同的正则表达式

Javascript 如何在正则表达式中精确匹配初始词相同的正则表达式,javascript,regex,Javascript,Regex,我对正则表达式知之甚少,但我的场景是我用javascript创建了以下正则表达式 RegExp: var regex1 = RegExp(/(\sClaim\b|^Claim\b|\sAssessment\b|^Assessment\b|\sClaim number\b|^Claim number\b)/ , 'ig'); var str1 = 'what assessment claim number'; var array1; while ((array1 = regex1.exec(str

我对正则表达式知之甚少,但我的场景是我用javascript创建了以下正则表达式

RegExp:

var regex1 = RegExp(/(\sClaim\b|^Claim\b|\sAssessment\b|^Assessment\b|\sClaim number\b|^Claim number\b)/ , 'ig');
var str1 = 'what assessment claim number';
var array1;
while ((array1 = regex1.exec(str1)) !== null) {
    console.log(`Found ${array1[0]}. Next starts at 
    ${regex1.lastIndex}.`);
}

正如我们可以看到的,在str1中,字符串包含索赔编号,但它只与索赔匹配,因此我们如何才能实现它将与索赔编号而不是仅与索赔匹配。

\sClaim\b
放在表达式末尾

(^Claim\s+number|^Claim|^Assessment|\sClaim\s+number|\sAssessment|\sClaim)\b

注意:我使用了
\s+
来表示空格和更正的顺序

问题是您的regex替换中既有
索赔
又有
索赔编号
。要解决您的问题,您需要以某种方式将
索赔
本身与
索赔编号
区分开来。一种方法是使用消极的前瞻:

var regex1 = RegExp(/(\bClaim\b(?! number)|\bAssessment\b|\bClaim Number\b)/, 'ig');
模式
\bClaim\b(?!number)
表示匹配
索赔
,但前提是后面没有
编号

我们还可以尝试通过将
索赔编号
放在备选方案的第一位来处理此问题。但当我们添加更多的术语时,这个技巧可能会在某个时候被打破。使用前瞻让我们确定我们要匹配的内容


只需使用
量词:

var input1='什么评估索赔编号';
var input2='什么评估索赔';
风险值模板=/(评估)索赔(\s成员)?/i;
var match1=input1.match(模板);
var match2=input2.match(模板);
console.log(match1[0]);

console.log(match2[0])我正要说出来!:)我看应该是第一个匹配的。我还要加上“\b”外圆括号简化了一点。@battlmonstr感谢
\b
的提示。实际上我只给出了一个示例,正则表达式是动态创建的。我已经考虑过将声明放在最后,但重点是它是动态创建的。实际上我只给出了一个示例,正则表达式是动态创建的动态的,所以我们不能改变顺序,如果它已经这样做了,那么我已经这样做了。你说的动态是什么意思?