我正在尝试在 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/