На самом деле вы можете проверить текст, который уже был написан, используя Обратную ссылку , а затем очистить все совпадения до того, что вам нужно удалить, см. Это регулярное выражение:
(?:[A-Z] {4})?(.+?$)\n[\s\S]*?\KOriginally posted by [A-Z] \1
Объяснение
Поиск
(?:[A-Z] {4})?
- соответствует первой части строки ( A
). (.+?$)
- группа захвата, на которую будет ссылаться \1
, это текст A
отправлено. \n[\s\S]*?
- следующая строка и сохраните выделение, пока не найдет Originally po...
. \K
- очищает весь выбор, поэтому, когда вы .replace()
не удалите важные вещи.
Match
Originally posted by [A-Z]
- Текст, который ссылается на сообщение A
. \1
- Текст A
отправлен, поэтому вы можете удалить его из сообщения B
.
- И, конечно, пробел, который будет удален (таким образом, окончательный текст не будет испорчен).
Алгоритм
Я понятия не имею, как перевести этоАлгоритм Построенияот m до R, но здесь это в любом случае:
var rgx = /(?:[A-Z] {4})?(.+?$)\n[\s\S]*?\KOriginally posted by [A-Z] \1 /;
while (str.match(rgx))
str = str.replace(rgx, "");
Примечания:
- Не забудьте использовать
perl=TRUE
- Для этого регулярного выражения требуется цикл, так какне может соответствовать "вложенным строкам" (см. пример Regex101 )
- Обратите внимание, что в конце выражения есть пробел
Пример
Текст
User df_text
A <b>Hi, how are you ?</b>
B This is beautiful!
C Heuwi
D Originally posted by C Heuwi Hellou
E Hello guys
F <s>Originally posted by A Hi, how are you ? </s><b>I am doing good</b>
G Whats going on ?
H Test2
I <s>Originally posted by B I am doing good </s>Welcome
J Originally posted by C Test2 Hellou
Первый запуск
User df_text
A Hi, how are you ?
B This is beautiful!
C <b>Heuwi</b>
D <s>Originally posted by C Heuwi </s>Hellou
E Hello guys
F I am doing good
G Whats going on ?
H <b>Test2</b>
I Welcome
J <s>Originally posted by C Test2 </s>Hellou
Последний запуск
User df_text
A Hi, how are you ?
B This is beautiful!
C Heuwi
D Hellou
E Hello guys
F I am doing good
G Whats going on ?
H Test2
I Welcome
J Hellou