我在這裏使用AngularJS。除了「C++」以外,我沒有任何問題匹配。每次我在「C++」類型的關鍵字生成JavaScript中的正則表達式和運行的配套,我得到了控制檯如下錯誤:Javascript - 使用變量RegExp匹配數據數組中的多個關鍵字
SyntaxError: Invalid regular expression: /(\bc++\b)/: Nothing to repeat
的代碼片段如下:
$scope.data = [
{'title': 'Blue Java Programming Book'},
{'title': 'Red C++ Programming Book'},
{'title': 'Javascript Dummies Guide'}
];
$scope.submit = function() {
$scope.length = $scope.keywords.split(" ").length;
$scope.keywordsArray = $scope.keywords.split(" ");
$scope.pattern = "";
for (var y = 0; y < $scope.length; y++) {
$scope.pattern += "(?=.*?\\b" + $scope.keywordsArray[y] + "\\b)";
}
$scope.pattern+=".*";
$scope.patt = new RegExp($scope.pattern, "i");
for (var x = 0; x < $scope.data.length; x++) {
console.log("Match [" + x + "] " + $scope.patt.test($scope.data[x].description));
}
}
<input type="text" ng-model="keywords"></input>
<button ng-click="submit()">Submit</button>
據我所知,在正則表達式的+號是匹配前面的字符一次或多次,然後,我嘗試硬編碼爲下面的正則表達式來測試和匹配,但不是我想要的,因爲我需要的方式RegExp是gen每次我輸入關鍵字時都會精心製作。
$scope.regExp = /c\+\++/i
是否有任何方式來生成與多個關鍵字飛一個RegExp以匹配數據的陣列,其包括「C++」?
我不是100%肯定你的問題是什麼,但你也可以代表C++爲C [\ +] {2} – 2015-01-21 02:53:57
你想生成的正則表達式'$ scope.data'中的每個關鍵字? – 2015-01-21 03:17:26
@AnuragPeshne我想根據輸入的關鍵字生成正則表達式,然後在$ scope.data中搜索匹配的關鍵字 – imationyj 2015-01-21 04:31:41