Change:
Using regex expressions am unable to find empty lines. Tried both the end of line sequence. Copying the same text in sublime simple n finds all the blank lines.
That has been an issue for me for quite a while. Never really checked again if it's already working because I started to automatically open notepad++ again whenever I needed to replace newlines.
This problem could manifest if the lines are being split before searching as opposed to doing a full text search. Interesting side note; seems to work in find in files (Ctrl+Shift+F), just not in the find dialog (Ctrl+F).
Couldn't even find empty lines with ^$ (in case they were being split without EOL).
Looked at the code, it does indeed look at each line individually. I'm created a new issue for multi-line matching

Discussion:
} export function regExpLeadsToEndlessLoop(regexp: RegExp): boolean { <ins> // Exit early if it's one of these special cases which are meant to match // against an empty string if (regexp.source === "^" || regexp.source === "^$" || regexp.source === "$") { return false; } </ins> // We check against an empty string. If the regular expression doesn't advance // (e.g. ends in an endless loop) it will match an empty string. var match = regexp.exec(''); return (match && <any>regexp.lastIndex === 0); }

export function startsWithUTF8BOM(str: string): boolean { return (str && str.length > 0 && str.charCodeAt(0) === __utf8_bom); <del> } </del>  No newline at end of file <ins> } </ins>

private _findMatchesInLine(searchRegex:RegExp, text:string, lineNumber:number, deltaOffset:number, counter:number, result:EditorCommon.IEditorRange[], limitResultCount:number): number { var m:RegExpExecArray; <ins> // Reset regex to search from the beginning searchRegex.lastIndex = 0; </ins> do { m = searchRegex.exec(text); if (m) { <del> result.push(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset)); </del> <ins> var range = new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset); // Exit early if the regex matches the same range if (range.equalsRange(result[result.length - 1])) { return counter; } result.push(range); </ins> counter++; if (counter >= limitResultCount) { return counter;

} while(m); return counter; } <del> } </del>  No newline at end of file <ins> } </ins>

rangeEqual(matches[i], ranges[i][0], ranges[i][1], ranges[i][2], ranges[i][3]); } }); <del> }); </del> <ins> test('/^/ find', () => { var ranges = [ [1, 1, 1, 1], [2, 1, 2, 1], [3, 1, 3, 1], [4, 1, 4, 1], [5, 1, 5, 1] ]; var matches = thisModel.findMatches('^', false, true, false, false); assert.equal(matches.length, ranges.length); for (var i = 0; i < matches.length; i++) { rangeEqual(matches[i], ranges[i][0], ranges[i][1], ranges[i][2], ranges[i][3]); } }); test('/$/ find', () => { var ranges = [ [1, 74, 1, 74], [2, 69, 2, 69], [3, 54, 3, 54], [4, 65, 4, 65], [5, 31, 5, 31] ]; var matches = thisModel.findMatches('$', false, true, false, false); assert.equal(matches.length, ranges.length); for (var i = 0; i < matches.length; i++) { rangeEqual(matches[i], ranges[i][0], ranges[i][1], ranges[i][2], ranges[i][3]); } }); test('/^$/ find', () => { var text = [ 'This is some foo - bar text which contains foo and bar - as in Barcelona.', '', 'And here's a dull line with nothing interesting in it', '', 'Again nothing interesting here' ]; thisModel = new Model.Model(text.join('n'), null); var ranges = [ [2, 1, 2, 1], [4, 1, 4, 1] ]; var matches = thisModel.findMatches('^$', false, true, false, false); assert.equal(matches.length, ranges.length); for (var i = 0; i < matches.length; i++) { rangeEqual(matches[i], ranges[i][0], ranges[i][1], ranges[i][2], ranges[i][3]); } }); }); </ins>