VSCode 筛选 URL 和电子邮件的代码段
VSCode snippet that filters for URLs and emails
以下代码片段通过将 TeX 文件中的选定文本与剪贴板(希望是 URL 中的)组合来创建超链接,
{
"key": "cmd+l",
"command": "editor.action.insertSnippet",
"when": "editorHasSelection && resourceExtname == .tex",
"args": {
"snippet": "\href{${CLIPBOARD:url}}{${TM_SELECTED_TEXT}}[=11=]"
}
}
有没有办法在执行代码段时选中插入的剪贴板内容?此外,有没有办法检查剪贴板是否是有效的网址或电子邮件地址,然后才将其插入?
更新
这是使用正则表达式仅粘贴剪贴板内容的无效尝试,当它是 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,\}\)\?\$)//}}}{${TM_SELECTED_TEXT}}[=12=]"
}
}
"snippet": "\href{${1:${CLIPBOARD}}}{${TM_SELECTED_TEXT}}[=10=]
当您触发代码段时, 将打印 select CLIPBOARD
内容。不过你会失去 url
提示,我认为没有办法保存它。
你的第二个问题:"is there a way to check whether the clipboard is a valid web or email address and only then insert it?"
我相信:
${1:${CLIPBOARD/(..your regex test for email validity here..)//}}
编辑(检查有效的电子邮件)- 测试:
"snippet": "\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})?(.*)//i}}}{${TM_SELECTED_TEXT}}[=14=]"
我从 www.regular-expressions.info 那里得到了电子邮件正则表达式。
这似乎有效。关键是,如果不匹配,使用片段转换,在本例中为 CLIPBOARD 变量内容,不匹配的内容将通过并打印。换句话说,如果你不捕获它,它就会通过,所以防止错误电子邮件或 url 通过和打印的唯一方法是同时捕获好的 email/url and 错误的版本,只打印好的捕获组。
这是基本形式:(regex email check here)?(.*)
因此 group1 具有有效的电子邮件(如果有),而 group2 具有剪贴板内容(如果它不是有效的电子邮件)。并且只打印 group1。整洁的。似乎有效。
EDIT 2(检查有效的urls)-伪代码:
"snippet": "\href{${1:${CLIPBOARD/(...url regex checker here...)?(.*)//}}}{${TM_SELECTED_TEXT}}[=16=]"
所以我刚刚将 ?(.*)
添加到 url 正则表达式检查的末尾。
编辑 2.5
这是一个 url 检查器,基于您的更新片段中使用的检查器:
"snippet": "\href{${1:${CLIPBOARD/^((https?:\/\/)?([w]{3}\.)+[a-z0-9-]{3,}\.[a-z]{2,}(\.[a-z]{2,})?)?(.*)$/${5:+bad url}/i}}}{${TM_SELECTED_TEXT}}[=18=]"
注意:用于验证 url 的正则表达式非常棘手 - 如果不是不可能的话 - 我使用了问题中的那个并且不保证其完整性。至少你可以看到如何 escape
正则表达式。
EDIT 3 email/url(如果在错误的 email/url 中有您想要的文本变量,在本例中为 $CLIPBOARD,但可以是任何变量):
将此 条件 ${2:+bad email}
添加到片段转换的替换部分,因此对于 email 版本:
"snippet": "\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})?(.*)/${2:+bad email}/i}}}{${TM_SELECTED_TEXT}}[=21=]" // email validater
您想要在 bad email
位置的任何文本。注意,检查组 2 中是否有非空内容,如果有,则打印 "bad email"。您的正则表达式可能正在使用不同的组来捕获 "bad emails/urls" - 在条件 ${2:+bad email}
.
中使用该组
以下代码片段通过将 TeX 文件中的选定文本与剪贴板(希望是 URL 中的)组合来创建超链接,
{
"key": "cmd+l",
"command": "editor.action.insertSnippet",
"when": "editorHasSelection && resourceExtname == .tex",
"args": {
"snippet": "\href{${CLIPBOARD:url}}{${TM_SELECTED_TEXT}}[=11=]"
}
}
有没有办法在执行代码段时选中插入的剪贴板内容?此外,有没有办法检查剪贴板是否是有效的网址或电子邮件地址,然后才将其插入?
更新
这是使用正则表达式仅粘贴剪贴板内容的无效尝试,当它是 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,\}\)\?\$)//}}}{${TM_SELECTED_TEXT}}[=12=]"
}
}
"snippet": "\href{${1:${CLIPBOARD}}}{${TM_SELECTED_TEXT}}[=10=]
将打印 select CLIPBOARD
内容。不过你会失去 url
提示,我认为没有办法保存它。
你的第二个问题:"is there a way to check whether the clipboard is a valid web or email address and only then insert it?"
我相信:
${1:${CLIPBOARD/(..your regex test for email validity here..)//}}
编辑(检查有效的电子邮件)- 测试:
"snippet": "\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})?(.*)//i}}}{${TM_SELECTED_TEXT}}[=14=]"
我从 www.regular-expressions.info 那里得到了电子邮件正则表达式。
这似乎有效。关键是,如果不匹配,使用片段转换,在本例中为 CLIPBOARD 变量内容,不匹配的内容将通过并打印。换句话说,如果你不捕获它,它就会通过,所以防止错误电子邮件或 url 通过和打印的唯一方法是同时捕获好的 email/url and 错误的版本,只打印好的捕获组。
这是基本形式:(regex email check here)?(.*)
因此 group1 具有有效的电子邮件(如果有),而 group2 具有剪贴板内容(如果它不是有效的电子邮件)。并且只打印 group1。整洁的。似乎有效。
EDIT 2(检查有效的urls)-伪代码:
"snippet": "\href{${1:${CLIPBOARD/(...url regex checker here...)?(.*)//}}}{${TM_SELECTED_TEXT}}[=16=]"
所以我刚刚将 ?(.*)
添加到 url 正则表达式检查的末尾。
编辑 2.5 这是一个 url 检查器,基于您的更新片段中使用的检查器:
"snippet": "\href{${1:${CLIPBOARD/^((https?:\/\/)?([w]{3}\.)+[a-z0-9-]{3,}\.[a-z]{2,}(\.[a-z]{2,})?)?(.*)$/${5:+bad url}/i}}}{${TM_SELECTED_TEXT}}[=18=]"
注意:用于验证 url 的正则表达式非常棘手 - 如果不是不可能的话 - 我使用了问题中的那个并且不保证其完整性。至少你可以看到如何 escape
正则表达式。
EDIT 3 email/url(如果在错误的 email/url 中有您想要的文本变量,在本例中为 $CLIPBOARD,但可以是任何变量):
将此 条件 ${2:+bad email}
添加到片段转换的替换部分,因此对于 email 版本:
"snippet": "\href{${1:${CLIPBOARD/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})?(.*)/${2:+bad email}/i}}}{${TM_SELECTED_TEXT}}[=21=]" // email validater
您想要在 bad email
位置的任何文本。注意,检查组 2 中是否有非空内容,如果有,则打印 "bad email"。您的正则表达式可能正在使用不同的组来捕获 "bad emails/urls" - 在条件 ${2:+bad email}
.