过滤网址和电子邮件的VSCode代码段

时间:2019-08-20 08:59:21

标签: visual-studio-code latex code-snippets vscode-snippets

以下代码段通过将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"
  }
}

1 个答案:

答案 0 :(得分: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具有ClipBoard的内容(如果不是有效的电子邮件)。并且仅打印group1。整齐。似乎可以工作。


编辑2 (以检查有效的 url )-伪代码:

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

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


EDIT 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中是否包含非空内容,如果存在,则打印“错误电子邮件”。您的正则表达式可能正在使用其他组来捕获“不良电子邮件/ URL”-在条件${2:+bad email}中使用该组。