I've played WitP three times now and not lost a single CV as the Allies. I avoid the IJN CV horde like the plague in early 1942, but I saturate the area they will be operating in (usually north of Australia and SW Pacific) with Dutch, British and American S-boat subs. As many as you've got, and put them on patrols around Rabaul, Surabaya, Singapore, and Truk. With luck they'll get a few sightings on those carriers and get some torpedoes off at them, and THEIR torpedoes work!
Usually by mid-42 a couple of things have happened. The IJN has had a couple of big CV's damaged by torpedoes, and their aircrew complements are greatly reduced by their constant sorties in support of landings all over the map. Meanwhile, my CV's have been staying in groups of 2-3, raided convoys in the Central Pacific and SW regions, built up their experience and stayed healthy. Whenever the IJN sends their carriers within LBA range of my bases, I send everything plus the kitchen sink at them. No, they don't hit very often, but they do increase the sortie rate, some pilots get lost, planes get worn out, and very rarely I get a hit.
I've noticed that starting around May 42, the AI begins splitting the CV's into smaller TF's instead of one gigantic 6 CV group. When that happens, I begin positioning my CV's, either in the Central Pacific at Pearl or down at Suva or Sydney. When these smaller TF's (typically 2-3 CV's) come out, I go after them with every CV I have, plus as many surface attack TF's I can create without weakening my CV TF protection. I'm sending CA's and CL's with 3-5 DD's, with the most aggressive commanders I can get, and they've got one job; get to the carriers. The combination of surface TF's plus carriers prowling after them usually nets me 1-3 carriers hit or sunk, at the cost of some carrier damage and sunk surface ships.
It's 12/42 in my latest game, and the month before Zuikaku, Soryu and a CVL came down from Truk to interdict my landing at the Shortlands. I had three big carriers just outside of Rabaul seaplane detection range, but my Catalinas at Tulagi and Russell Island spotted them first. My LBA from Lunga and Tulagi attacked first, mostly DB's and 2E bombers, got a hit on Soryu and attracted a lot of return attention from the carrier bombers. My CV TF's came up east of the Solomons and hit the IJN force with full deck strikes, crippling Zuikaku and sinking Soryu. The depleted airstrike from the CVL and diverted bombers to land bases damaged Hornet but she'll survive. My return strikes sank Zuikaku and the CV's and LBA then hunted down the CVL later on.
So basically, be willing to concede everything north of Australia and NW of Noumea if necessary, but make it fight for everything it wants to take. Keep your CV's away from a huge fight until the AI starts breaking up the KB, then attack it piecemeal.