我正在尝试在 Apple Automator 中使用以下代码

var lnRange = getSelectedLineRange();
var ln = getTextInRange(lnRange[0],lnRange[1]);

var lines = ln.split('\n').sort(function(a, b)
{
  var parsedA = a.replace(/\*\s(<s>)?(The )?/, "* ");
  var parsedB = b.replace(/\*\s(<s>)?(The )?/, "* ");

  return parsedA.localeCompare(parsedB);
});
setTextInRange(lnRange[0],lnRange[1],lines.join('\n'));

我知道代码是合理的,并达到了我需要的结果(在 iPhone 上的草稿中运行它会产生我需要的结果,即在忽略使用 <s> 和/或“在”开始时对 Markdown 列表进行排序一行。* 需要保留在列表中)。

将它从 iPhone 转移到 Automator 是事情崩溃的地方,因为 Automator 找不到变量 getSelectedLineRange。我猜这是 Automator 处理文本输入的方式与脚本想要获取和处理它的方式之间的冲突,但我对如何解决它陷入僵局。

举例来说(如果我的整个方法都是错误的)我想要这个列表,在我可以抛出的任何文本字段中
* Armadillo
* The aardvark
* <s>Rhino</s>
* <s>The Zebra</s>
* The Giraffe
* Hedgehog

选中后,通过脚本,作为服务运行,然后像这样出来
* The aardvark
* Armadillo
* The Giraffe
* Hedgehog
* <s>Rhino</s>
* <s>The Zebra</s>

我当然不喜欢 javascript 解决方案,但这是我的起点。

最佳答案

Automator 中的“ Run JavaScript ”操作需要 run(input, parameters) 函数。

输入 是一个包含一项(文本)的数组。

function run(input, parameters) {
   var lines = input[0].split('\n').sort(function(a, b)
   {
      var parsedA = a.replace(/\*\s(<s>)?(The )?/, "* ");
      var parsedB = b.replace(/\*\s(<s>)?(The )?/, "* ");
      return parsedA.localeCompare(parsedB);
   });
   return lines.join('\n');
}

关于javascript - 通过 Apple Automator 运行 Javascript 排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31773900/

10-09 15:42