我想在一个 Velocity模板 中(使用JavaScript)实现类似词汇表的功能。以下是用例:
- 有大量物品,它们的描述可能包含对预定义术语的引用
- 有一份已定义的术语清单 -> allGlossary
- 我希望自动查找并标记出所有在我的物品描述中出现过的allGlossary列表中的项目
示例:
allGlossary = ["GUI","RBG","fine","Color Range"]
物品描述: The interface (GUI) shall be generated using only a pre-defined RGB color range.
运行脚本后,我希望描述看起来像这样: "The interface (GUI) shall be generated using only a pre-defined RGB Color Range."
注意:即使 "fine" 出现在描述中(defined),也不应该被标记。
我考虑将每个物品的描述拆分为单词,但这样会错过所有具有多个单词的词汇表项。我的当前想法是在每个描述中查找列表中的每个项目,但我有以下限制:
- 我需要精确匹配两个列表中的项目(单个和多个单词)
- 搜索不区分大小写
- 找到的项目可能位于文本开头或结尾,并由各种符号分隔:空格、逗号、句号、括号、方括号等
我有以下代码,它可以工作但不区分大小写:
#set($desc = $item.description)
#foreach($g in $allGlossary)
#set($desc = $desc.replaceAll("\b$g\b", "*$g*"))
#end##foreach
能有人帮忙将这个不区分大小写吗?或者有更好的方法吗?
谢谢!
更新: 根据下面的答案,我试图在我的Velocity模板页面中执行以下操作:
#set($allGlossary = ["GUI","RGB","fine","Color Range"])
#set($itemDescription = "The interface (GUI) shall be generated using only a pre-defined RGB color range.")
<script type="text/javascript">
var allGlossary = new Array();
var itemDescription = "$itemDescription";
</script>
#foreach($a in $allGlossary)
<script type="text/javascript">
allGlossary.push("$a");
console.log(allGlossary);
</script>
#end##foreach
<script type="text/javascript">
console.log(allGlossary[0]);
</script>
问题在于,如果我尝试显示整个 allGlossary 数组,它包含正确的元素。但是一旦我尝试仅显示其中一个(如示例中所示),就会出现错误
Uncaught SyntaxError: missing ) after argument list
。