我正在尝试使用搜索匹配多个案例和正则表达式。我的正则表是:
var r = new RegExp(actualArr[i] + '(e?s)?(\>|$)', 'gi')
我正在使用搜索:
if(expected.search(r) !== -1){...}
当我使用搜索在控制台中运行正则表达式时,它运行正常,但通过我的应用程序,我收到以下错误:
SyntaxError: Invalid regular expression: /(Squat(e?s)?/: Unterminated group
当我打印出我的正则表达式时,我明白了:
/Squat(e?s)?(>|$)/gi
为什么在这里添加额外的(
?我错过了什么?
这是完整的代码块:
let matchPlural = function(actual,expected) {
let actualArr = actual.split(" ");
for(let i = 0; i < actualArr.length; i++){
let r = new RegExp(actualArr[i] + '(e?s)?(\>|$)', 'gi')
if (expected.search(r) !== -1){
return true;
}
}
return false;
}
作为旁注,我正在开发AngularJS,我认为这不会影响任何事情......
答案 0 :(得分:0)
有时我认为actualArr[i]
是一个单词数组,必须以括号开头。由于“括号”在正则表达式中定义了一个组,因此当您使用'(e?s)?(\>|$)', 'gi')
运行以下代码段并查看控制台结果
var applyFix = true;
let matchPlural = function(actual,expected) {
let actualArr = actual.split(" ");
for(let i = 0; i < actualArr.length; i++) {
let word = actualArr[i];
// Remove any non-word character
if(applyFix) word = word.replace(/\W/g,'');
let r = new RegExp(word + '(e?s)?(\>|$)', 'gi')
if (expected.search(r) !== -1){
return true;
}
}
return false;
}
console.log(matchPlural('Foo Dummy Squat','Hello Squate'))
console.log(matchPlural('Foo Dummy Squat','Hello Squates'))
console.log(matchPlural('Foo Dummy Squat','Hello Squats'))
console.log(matchPlural('Foo Dummy (Squat','Hello Squats'))
// Disable fix
applyFix = false
console.log(matchPlural('Foo Dummy (Squat','Hello Squats'))