2011-02-07 3 views
1

У меня есть следующие RegEx:RegEx соответствует только символу новой строки с заданными условиями?

^(?!#)(?<=.+)$\r 

(с глобальными и многопоточных флагами)

Что я хочу сделать, это соответствовать новой строки только, когда он заканчивает линию, не начинается с '#'.

+0

Так что вы не хотите, чтобы доллар * после * '\ r'? –

+0

@ELR: Чтобы быть уверенным, я удалил '$', но он все еще не работает. '\ R', вероятно, даже не должен присутствовать при использовании многострочных и' $ '. –

+0

И Javascript regex не поддерживает lookbehind :( –

ответ

1
function doSplit(input){ 
    var newl=String.fromCharCode(13)+String.fromCharCode(10); //make a newline 
    var str = sInput.value.split(/\n/);      //split on newlines 
    for (var i=0,iMax=str.length; i<iMax; i++){    //loop through 
     //if it starts # add a newline 
     if (str[i][0]=='#') {str[i]+=newl;}     
    }; 

    return str.join(''); //join it back up 
} 

Example here

конечно, это будет на самом деле добавить несуществующий символ новой строки в конце (если последняя строка начинается с символа #), так замените петлю, чтобы избежать этого, например ...

for (var i=0,iMax=str.length-1; i<iMax; i++){    //loop through 
+0

Мне было бы интересно увидеть сравнение времени выполнения этой функции с решением regex .. , –

0

Нулевой шириной упреждающей утверждение заботится о «не начинается с», но я думаю, что вы перепутать использование^и $ (в многострочном режиме, который является)

Вы, вероятно, хотите что-то вроде

(^|\n)(?!#)(\n) 
Смежные вопросы