【发布时间】:2017-07-02 00:32:12
【问题描述】:
我想在 Velocity 模板 中实现一种词汇表(使用 Javascript)。以下是用例:
- 有大量项目的描述可能包含对预定义术语的引用
- 有一个定义的术语列表 -> allGlossary
- 我想自动查找并标记 allGlossary 列表中出现在我的所有项目描述中的所有项目
例子:
allGlossary = ["GUI","RBG","fine","Color Range"]
项目描述:界面(GUI)应仅使用预定义的RGB颜色范围生成。
运行脚本后,我希望描述如下所示: “界面(GUI)应仅使用预定义的RGB 颜色范围生成。”
注意:即使描述中确实出现了“fine”(defined),也不应标记。
我曾想过将每个项目的描述拆分为单词,但后来我错过了所有超过 1 个单词的词汇表项目。我目前的想法是在每个描述的列表中查找每个项目,但我有以下限制:
- 我只需要查找 2 个列表中的确切项目(单个和多个单词)的匹配项
- 搜索必须不区分大小写
- 找到的项目可能位于文本的开头或结尾,并由各种符号分隔:空格、逗号、句点、括号、方括号等。
我有以下代码可以工作,但不区分大小写:
#set($desc = $item.description)
#foreach($g in $allGlossary)
#set($desc = $desc.replaceAll("\b$g\b", "*$g*"))
#end##foreach
有人可以帮忙使这个不区分大小写吗?或者有没有人有更好的方法来做到这一点?
谢谢!
更新: 根据下面的答案,我尝试在我的速度模板页面中执行以下操作:
#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。
【问题讨论】:
-
这很可能不是您想使用 Regex 解决的问题
-
好的,我愿意接受任何其他建议
标签: javascript regex velocity