用于筛选 URL 和电子邮件的 VSCode 代码段



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

"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)?(.*)

因此,组 1 具有有效的电子邮件(如果有(,如果不是有效的电子邮件,则组 2 具有剪贴板内容。 并且仅打印组 1。 整洁。 似乎有效。


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

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

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


编辑 2.5下面是一个基于更新代码段中使用的网址检查器:

"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}中使用该组。

最新更新