-1

Indesign GREP 新手在这里。我收到需要重新格式化的时间文本。我将如何使用 GREP 代码格式化时间范围,以在同一时间范围内有两次“am”或“pm”的任何时间范围中省略第一个“am”或“pm”?另外,我试图从所有时间范围中省略“:00”。有没有一种简单的方法可以在同一个 GREP 中消除它?

例如:

提供以下服务: • 上午 9:15-10:00 • 下午 1:00-下午 3:30 • 上午 11:30-下午 12:30 • 上午 9:00-下午 1:00

这就是我的目标: • 9:15-10am • 1-3:30pm • 11:30am-12:30pm • 9am-1pm

4

2 回答 2

1

如果您不介意脚本,这里是基本算法:

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) {}

它将替换选定的文本。

于 2021-12-23T23:08:20.927 回答
0

这可以使用 GREP 完成,但您需要 2 次搜索:

am(?=-\d{1,2}:\d{2}am)

pm(?=-\d{1,2}:\d{2}pm)
于 2021-12-29T19:17:20.087 回答