我的IDE PHPstorm允许你使用正则表达式进行搜索和替换,我发现自己经常做的事情之一是切换顺序或操作,也就是说,在函数中我将使用列表b设置列表中的项目的值b作为价值观。
但是在函数b中我想要反转它。 所以我想使用列表a作为值来设置列表b中的项目的值。
一个恰当的例子就是:
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'));
}
排除格式化(只是为了让我的观点更加清晰),我可以用什么样的正则表达式代替我?
答案 0 :(得分:4)
基本正则表达式 - 没有什么花哨或复杂的
搜索:(clip\.data\('[a-zA-Z0-9]+')\s*, (\$[a-zA-Z0-9]+\.val\()(\)\);)
替换为:\$2\$1\$3
这里唯一与PhpStorm相关的东西是替换字符串格式 - 你必须“转义”$才能使它工作(即必须\$2
才能使用第二个回溯而不仅仅是{{1 }或$2
(在其他引擎中使用))。
这会改变这个:
\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());
有用的链接: http://www.jetbrains.com/phpstorm/webhelp/regular-expression-syntax-reference.html
答案 1 :(得分: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));
}
}
是的,我知道存在微小的命名不一致意味着这不是开箱即用的,例如Game
与gameId
。这也是清理它的绝佳场合:)。如果您仍想保留ID的标题大小写(例如#clipDetailsGame
而不是#clipDetailsgame
),请将其保留在fields
数组中的标题大小写中并使用toLowerCase
你需要小写的地方。
顺便说一下,有一个有趣的读物是什么让DRY成为一件好事:https://softwareengineering.stackexchange.com/questions/103233/why-is-dry-important