ANAHEIM, Calif. – Jered Weaver won a riveting pitching duel with C.J. Wilson, and the Los Angeles Angels converted an error by Texas center fielder Endy Chavez into an unearned run Thursday, beating the Rangers 1-0 and moving within three games of the AL West leaders.

Weaver (13-4) scattered seven hits in seven-plus innings and struck out six to win his seventh straight decision and reduce his major league-best ERA to 1.81, the lowest by an Angels pitcher through his first 21 starts of a season. The Angels won the rubber game of the three-game set one day after rallying from a five-run deficit to end the Rangers’ 12-game winning streak.

Wilson (10-4) held the Angels to two hits over eight innings, struck out eight and walked one. Wilson, who was pushed up a day ahead of Colby Lewis so he could face the Angels, allowed a leadoff single by Mark Trumbo in the fifth and a two-out double by Maicer Izturis in the eighth.

“You knew it was going to be a battle because C.J. is having a great year and he’s turned himself into a great pitcher,” Weaver said. “It’s been fun going out there and battling. It’s been going good so far, and hopefully we can keep it rolling and limit those runs.”

BLUE JAYS 7, MARINERS 5: Rajai Davis hit a tiebreaking double in the eighth inning and Toronto handed visiting Seattle its 12th straight loss.

Miguel Olivo erased a 5-1 deficit by hitting Seattle’s first grand slam of the season in the top of the eighth, but the Mariners couldn’t add on.

RAYS 2, YANKEES 1: James Shields won for the first time in nearly a month, outpitching CC Sabathia for Tampa Bay at St. Petersburg, Fla.

Shields (9-8) allowed six hits, walked three and struck out six over 72/3 innings in his second duel with Sabathia in 12 days. Shields lost 1-0 to Sabathia on July 10 at Yankee Stadium, yielding the run on an errant pickoff throw to third base.

TIGERS 6, TWINS 2: Justin Verlander threw eight dominant innings, Jhonny Peralta drove in three runs with three hits, and Detroit won at Minneapolis for its 10th straight victory against the Twins.

Brennan Boesch hit a two-run homer, and Miguel Cabrera, Victor Martinez and Peralta — batting fourth, fifth and sixth — were all over Twins starter Carl Pavano (6-7) in the first game of another important four-game series in the four-team AL Central race.

NATIONAL LEAGUE

CARDINALS 6, METS 2: Albert Pujols hit a two-run homer in the first and Jake Westbrook had the Mets pounding the ball into the ground over eight excellent innings for St. Louis at New York to avoid a three-game sweep. Pujols drove a pitch from Jonathon Niese (9-8) left up in the strike zone off the facade of the second deck for his 21st home run of the season and a 2-0 lead.

PADRES 5, MARLINS 3: Dustin Moseley and three relievers held Florida without an earned run as San Diego completed a series sweep at Miami.

Cameron Maybin had four hits and scored twice for the Padres, who outscored the Marlins 23-6 in the series.

BRAVES 9, ROCKIES 6: Jason Heyward and Freddie Freeman each homered and had two hits as Atlanta won at Denver.