0

我的 IDE PHPstorm 允许您使用正则表达式进行搜索和替换,我发现自己经常做的一件事是切换顺序或操作,也就是在函数 a 中,我将使用列表 b 作为值设置列表 a 中的项目的值.

但是然后在函数 b 中我想反转它。所以我想为列表 b 中的项目设置一个值,使用列表 a 作为值。

一个恰当的例子是这样的:

var $clipDetailsGame        = $('#clipDetailsGame');
var $clipDetailsTitle       = $('#clipDetailsTitle');
var $clipDetailsByline      = $('#clipDetailsByline');
var $clipDetailsTeamOne     = $('#clipDetailsTeamOne');
var $clipDetailsTeamTwo     = $('#clipDetailsTeamTwo');
var $clipDetailsReferee     = $('#clipDetailsReferee');
var $clipDetailsDescription = $('#clipDetailsDescription');
var $clipDetailsCompetition = $('#clipDetailsCompetition');

function a(clip){
    clip.data('gameId'       , $clipDetailsGame.val());
    clip.data('title'        , $clipDetailsTitle.val());
    clip.data('byline'       , $clipDetailsByline.val());
    clip.data('team1'        , $clipDetailsTeamOne.val());
    clip.data('team2'        , $clipDetailsTeamTwo.val());
    clip.data('refereeId'    , $clipDetailsReferee.val());
    clip.data('description'  , $clipDetailsDescription.val());
    clip.data('competitionId', $clipDetailsCompetition.val()); 
}

function b (clip){
    $clipDetailsGame       .val(clip.data('gameId'));
    $clipDetailsTitle      .val(clip.data('title'));
    $clipDetailsByline     .val(clip.data('byline'));
    $clipDetailsTeamOne    .val(clip.data('team1'));
    $clipDetailsTeamTwo    .val(clip.data('team2'));
    $clipDetailsReferee    .val(clip.data('refereeId'));
    $clipDetailsDescription.val(clip.data('description'));
    $clipDetailsCompetition.val(clip.data('competitionId')); 
}

排除格式(它只是为了让我的观点更清楚),我可以使用什么样的正则表达式来代替我?

4

2 回答 2

4

基本正则表达式——一点也不花哨或复杂

搜索:(clip\.data\('[a-zA-Z0-9]+')\s*, (\$[a-zA-Z0-9]+\.val\()(\)\);)
替换为:\$2\$1\$3

这里唯一与 PhpStorm 相关的是替换字符串格式——你必须“转义”$ 才能让它工作(即它必须\$2使用第二个回溯而不是仅仅使用$2or \2(在其他引擎中使用))。

这将改变这一点:

clip.data('gameId'       , $clipDetailsGame.val());
clip.data('title'        , $clipDetailsTitle.val());
clip.data('byline'       , $clipDetailsByline.val());
clip.data('team1'        , $clipDetailsTeamOne.val());
clip.data('team2'        , $clipDetailsTeamTwo.val());
clip.data('refereeId'    , $clipDetailsReferee.val());
clip.data('description'  , $clipDetailsDescription.val());
clip.data('competitionId', $clipDetailsCompetition.val()); 

进入这个:

$clipDetailsGame.val(clip.data('gameId'));
$clipDetailsTitle.val(clip.data('title'));
$clipDetailsByline.val(clip.data('byline'));
$clipDetailsTeamOne.val(clip.data('team1'));
$clipDetailsTeamTwo.val(clip.data('team2'));
$clipDetailsReferee.val(clip.data('refereeId'));
$clipDetailsDescription.val(clip.data('description'));
$clipDetailsCompetition.val(clip.data('competitionId')); 

有用的链接: http: //www.jetbrains.com/phpstorm/webhelp/regular-expression-syntax-reference.html

于 2013-06-19T09:13:41.803 回答
2

清理(​​不是这个问题的答案,而是另一种组织代码以使搜索和替换变得不必要的方式):

var $details = {};
var fields = [
    'Game', 'Title', 'Byline', 'TeamOne', 'TeamTwo', 'Referee', 'Description',
    'Competition'
];
for(field in fields) {
    $details[field] = $('#clipDetails' + field);
}

function a(clip) {
    for(field in fields) {
        clip.data(field, $details[fields].val());
    }
}

function b(clip) {
    for(field in fields) {
        $details[field].val(clip.data(field));
    }
}

是的,我知道有微小的命名不一致,这意味着这不是开箱即用的,例如Gamevs gameId. 这也是清理它的绝佳机会:)。如果您仍想保留 id 的标题大小写(例如#clipDetailsGame代替#clipDetailsgame),请将其保留在fields数组中的标题大小写中,并toLowerCase在需要小写的地方使用。

顺便说一句,这里有一篇有趣的读物,关于什么使 DRY 成为一件好事:https ://softwareengineering.stackexchange.com/questions/103233/why-is-dry-important

于 2013-06-19T09:33:46.727 回答