Совпадение разрывов строк в строках, которые не начинаются со специального символа - PullRequest
0 голосов
/ 15 января 2020

Я хочу сопоставить все \n или \r, за исключением тех, когда строка начинается с @ У меня есть следующее регулярное выражение: (?!^@.*\r*\n*)(\r*\n*) Например:

@text text text 

@text text text
The line break after this text should be matched 
The line break after this text also should be selected 

@this line break should not be selected

Так что следует выбирать только разрывы строк во 2-м, 4-м, 5-м и 6-м и 7-м. Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Вы можете попробовать что-то вроде этого. Используйте split для разделения строки с разрывом строки '\ n', это заменит все разрывы строки в строке и возвратит массив строки. Теперь l oop через массив и проверьте, начинается ли строка с '@', затем добавьте разрыв строки в конце строки.

При таком подходе вы можете добавить разрыв строки в любое время.

let values = `@text text text 

@text text text
The line break after this text should be matched 
The line break after this text also should be selected 

@this line break should not be selected`;

values = values.split(/\n/); // split all with line break

values.forEach((value, index) => {
  if (value.match(/^@.*/gm)) {
    values[index] = value + " <br>"; // or add \n
  } 
});
document.getElementById('result').innerHTML = values.join('');
<div id="result"></div>
1 голос
/ 15 января 2020

Как это?

https://regex101.com/r/bYIpiQ/2

https://regexr.com/4s98n

Примечание. Я НЕ ВЫБИРАЮ текст, Я ЗАМЕНЯЮ \ n \ r или \ n или \ r

const text = document.getElementById("x").innerText;
document.getElementById("x").innerText=text.replace(/(^[^@].*)(\r\n|\r|\n)/gm,"$1<BR/>")
#x { font-family: "Courier New", monospace;
  white-space: pre; }
<div id="x">@line 1: text text text 
line 2:
@line3: text text text
line 4: The line break after this text should be matched 
line 5: The line break after this text also should be selected 
line 6:
@line 7: this line break should not be selected
</div>
...