我正在寫一個JavaScript代碼來解析一些語法文件,這是相當多的代碼,但我會在這裏發佈相關信息。我正在使用Javascript正則表達式來匹配一個字符串中的重複行。該字符串包含,例如(假設字符串名稱是線):Javascript正則表達式重複行匹配不能正常工作
if else ; print { } test1 test1 = + - * / ( ) num string comment id test2 test2
應該發生什麼,是「測試1」和「測試2」找到了一個匹配。然後它應刪除重複項,並留下1個test1和test2實例。發生的事情根本不匹配。我對我的正則表達式很有信心,但是JavaScript可能會做我不期待的事情。以下是對上述字符串進行處理的代碼:
var rex = new RegExp("(.*)(\r?\n\1)+","g");
var re = '/(.*)(\r?\n\1)+/g';
rex.lastIndex = 0;
var m = rex.exec(lines);
if (m) {
alert("Found Duplicate");
var linenum = lines.search(re); //Get line number of error
alert("Error: Symbol Defined twice\n");
alert("Error occured on line: " + linenum);
lines = lines.replace(rex,""); //Gets rid of the duplicate
}
它從不進入if(m)語句。因此找不到匹配。我在這裏測試了正則表達式:http://regexpal.com/在我的代碼中使用正則表達式以及提供的示例文本。它匹配得很好,所以我有點不知所措。如果有人能幫上忙,那會很好。
謝謝。
編輯: 忘了補充,我正在測試這個在Firefox中,它只能在Firefox中工作。不知道這是否重要。
m0,m1,m3的功能是什麼?該函數返回m1 + m2,但是這會保持什麼值?我沒有看到m1在任何地方使用。 – Dohrann
@Dohrann我在所有人的回答中都加入了這個解釋,以瞭解這些論點發生了什麼。 – inhan
我現在明白了,謝謝,雖然這匹配在'18和20行'。因此,它與之後的第一個「test2」和「空白」空白相匹配。這我不明白。另外,替換不能正確替換,字符串仍然返回以前的內容。 – Dohrann