@answer18 предположим, что есть возможность указывать группу символов как один, тогда (исключительно глупый код в теории — это не рабочий вариант) /<(\w+)[^>]*>(!<\1[^>]*>)*123.*?<\/\1>/
Но такой вариант на практике невозможен — во-первых, вот это какой-то абсурд (!<\1>)
А, во-вторых, я намеренно предполагаю, что могут быть атрибуты и прочие дела. К тому же, могут быть вложения типа
То есть в данном случае удачно совпали потолок моих знаний и возможность постановки нерешаемой задачи. Удачно — это потому, что я с лёгким сердцем и умным видом (насколько это возможно) говорю — ах, оставьте, сударь...
@mamishev да, конечно, речь о принципе шла. Обновил пример — сделал более грамотным объект соответствия. Коды в нём оставил только для пущей красоты — они больше не нужны.
@bootd в вашем примере псевдообласть :after от первого же блока .clearfix учла левый плавающий блок, это же понятно:)
Хотите с псевдообластями работать? Не вопрос, но требуется создать область, учитывающую размеры плавающих потомков (overflow, float) jsfiddle.net/petroveg/wt25n3om/1