С родными JS-регулярными выражениями, которые не поддерживают юникод, ваш единственный вариант - явно перечислять символы, которые могут заканчивать тег, и сопоставлять все остальное, например:
> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]
. [\s.,:,]
должен включают пробелы, знаки препинания и все остальное можно считать завершающим символом.