public function handle($pattern, $resultHandler, $partHandler)
    {
        $nodes = [];

        $text = preg_replace_callback($pattern, function ($matches) use (&$nodes) {
            $nodes[] = $matches;

            return "\0";
        }, $this->text);

        $parts = explode("\0", $text);

        $match = 0;
        foreach ($nodes as $node) {
            if ($parts[$match] !== '') $partHandler(new static($parts[$match]));

            $args = array_map(function ($item) {
                return new static($item);
            }, $node);

            call_user_func_array($resultHandler, $args);

            $match++;
        }

        if ($parts[$match] !== '') $partHandler(new static($parts[$match]));

        return $this;
    }