1

下面的代码片段通过将 TeX 文件中的选定文本与剪贴板(希望是 URL)结合起来创建一个超链接,

{
  "key": "cmd+l",
  "command": "editor.action.insertSnippet",
  "when": "editorHasSelection && resourceExtname == .tex",
  "args": {
    "snippet": "\\href{${CLIPBOARD:url}}{${TM_SELECTED_TEXT}}$0"
  }
}

有没有办法在执行片段时选择插入的剪贴板内容?此外,有没有办法检查剪贴板是否是有效的网络或电子邮件地址,然后才插入?

更新

这是使用正则表达式仅粘贴剪贴板内容的无效尝试,当它是 url 时。

{
  "key": "cmd+l",
  "command": "editor.action.insertSnippet",
  "when": "editorHasSelection && resourceExtname == .tex",
  "args": {
    "snippet": "\\href{${1:${CLIPBOARD/(\\^\\(\\(https\\?\\)://\\)\\?\\(\\[w\\|W\\]\\{3\\}\\.\\)\\+\\[a-zA-Z0-9-\\.\\]\\{3,\\}\\.\\[a-zA-Z\\]\\{2,\\}\\(\\.\\[a-zA-Z\\]\\{2,\\}\\)\\?\\$)/$1/}}}{${TM_SELECTED_TEXT}}$0"
  }
}
4

1 回答 1

2

"snippet": "\\href{${1:${CLIPBOARD}}}{${TM_SELECTED_TEXT}}$0

CLIPBOARD当您触发代码段时,将打印并选择内容。你会失去url提示,但我认为没有办法保存它。

您的第二个问题:“有没有办法检查剪贴板是否是有效的网络或电子邮件地址,然后才插入?”

我相信是这样:

${1:${CLIPBOARD/(..your regex test for email validity here..)/$1/}}

编辑(检查有效的电子邮件) - 测试:

"snippet": "\\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,})?(.*)/$1/i}}}{${TM_SELECTED_TEXT}}$0"

我从www.regular-expressions.info收到了电子邮件正则表达式。

这似乎有效。关键是,如果你不匹配片段转换,在这种情况下 CLIPBOARD 变量内容,不匹配的内容将通过并被打印。换句话说,如果您不捕获它,它将通过,因此防止错误的电子邮件或 url 通过并被打印的唯一方法是同时捕获一个好的电子邮件/url错误的版本,并且只打印好的捕获组。

所以这是基本形式:(regex email check here)?(.*)

因此 group1 具有有效的电子邮件(如果有),而 group2 具有剪贴板内容(如果它不是有效的电子邮件)。并且只打印 group1 。整洁的。似乎工作。


编辑2(检查有效的网址) - 伪代码:

"snippet": "\\href{${1:${CLIPBOARD/(...url regex checker here...)?(.*)/$1/}}}{${TM_SELECTED_TEXT}}$0"

所以我只是添加?(.*)到 url 正则表达式检查的末尾。


编辑 2.5 这是一个基于更新片段中使用的URL检查器:

"snippet": "\\href{${1:${CLIPBOARD/^((https?:\\/\\/)?([w]{3}\\.)+[a-z0-9-]{3,}\\.[a-z]{2,}(\\.[a-z]{2,})?)?(.*)$/$1${5:+bad url}/i}}}{${TM_SELECTED_TEXT}}$0"

注意:验证 url 的正则表达式非常棘手 - 如果不是不可能的话 - 我使用了问题中的那个,并且不保证它的完整性。至少您可以看到如何escape使用正则表达式。


编辑 3 电子邮件/网址(如果在变量中有错误电子邮件/网址时需要一些文本,在本例中为 $CLIPBOARD,但可以是任何变量):

将此条件 $1${2:+bad email}添加到片段转换的替换部分,因此对于电子邮件版本:

"snippet": "\\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,})?(.*)/$1${2:+bad email}/i}}}{${TM_SELECTED_TEXT}}$0" // email validater

任何你想要的文字bad email。请注意,检查组 2 中是否有非空内容,如果有,则打印“错误电子邮件”。您的正则表达式可能正在使用不同的组来捕获“不良电子邮件/网址” - 在条件中使用该组${2:+bad email}

于 2019-08-20T14:20:24.150 回答