Indesign GREP新手来了。我收到了需要改革的信息。我如何使用GREP代码格式化时间范围,以省略第一个“am”或“pm”从任何时间范围,有“am”或“pm”两次在同一时间范围?
我还试图从所有时间范围中省略“:00”。在同一个GREP中有没有一种简单的消除方法?
例如:
这是所提供的:
吗?9:15am-10:00am
吗?1:00pm-3:30pm
吗?11:30am-12:30pm
吗?9:00am-1:00pm
这就是我的目标:
吗?9:15-10am
吗?1-3:30pm
吗?11:30am-12:30pm
吗?9 am-1pm
###如果你不介意脚本这里是基本的算法:
function clean_ranges(txt) {
txt = txt.replace(/:00/g, '');
var ranges = txt.split(' ? ');
for (var i=0; i<ranges.length; i++) {
if (ranges[i].split('am').length>2) ranges[i] = ranges[i].replace('am','');
if (ranges[i].split('pm').length>2) ranges[i] = ranges[i].replace('pm','');
}
return ranges.join(' ? ');
}
var str = '? 9:15am-10:00am ? 1:00pm-3:30pm ? 11:30am-12:30pm ? 9:00am-1:00pm';
console.log(clean_ranges(str));
InDesign的完整实现如下:
function clean_ranges(txt) {
txt = txt.replace(/:00/g, '');
var ranges = txt.split(' ? ');
for (var i = 0; i < ranges.length; i++) {
if (ranges[i].split('am').length > 2) ranges[i] = ranges[i].replace('am', '');
if (ranges[i].split('pm').length > 2) ranges[i] = ranges[i].replace('pm', '');
}
return ranges.join(' ? ');
}
try {
var txt = app.selection[0].contents;
if (txt.split('-').length < 2) exit(); // do nothing if selected text has no '-'
app.selection[0].contents = clean_ranges(txt);
} catch(e) {}
它将替换选中的文本。
###这个可以用GREP完成,但是你需要2次搜索:
am(?=-\d{1,2}:\d{2}am)
pm(?=-\d{1,2}:\d{2}pm)