indesigngrep重新格式化时间范围

2022-01-21 15:30:14 标签 adobe-indesigngrep-indesign

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)
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码