I have this snippet.
SELECT 'SELECT * FROM ' + OBJECT_SCHEMA_NAME(o.object_id, DB_ID(${20:})) + '.' + name,
*
FROM ${20/$/./}sys.all_objects o
WHERE name LIKE '%${10:hadr}%'
ORDER BY o.name;
And this is how it works:
When the user types something in the function DB_ID()
, I hope the content the user typed appears before sys.all_objects
AND append an additional .
. It already works like this as it shown in the above gif. However, I also hope if the user types nothing in the function DB_ID()
, don’t add .
before sys.all_objects
. Is this possible?
2
Answers
You can use lookbehind to assert that there’s something in that field:
(?<=.)$
. For a minimal example, let’s say this is the original snippet:Change it to:
If I type something, e.g.
x
, then press Tab, I get:If I don’t type anything then press Tab, I get:
No need to add the
:
in field 2:Use field 2
(.*)
$1
.
if the typed text is not empty:${1:+.}