【发布时间】:2011-02-23 15:46:35
【问题描述】:
我正在遍历一组英语短语,如果找到匹配项,则使用当前文本节点,我将其替换为 non_english 数组中的翻译。对于完全匹配,所有这些都 100% 有效。
但是对于部分匹配,我需要使用 .match 命令,它允许部分匹配。
我搜索完全匹配的代码是这样的:
找到的变量 = $.inArray(value,en_lang);
如果找到值,则替换文本。这种方法速度很快,我很喜欢。
但是要进行部分单词/短语匹配,我必须使用这个循环代码。
// loop thru language arrays
for (var x = en_count; x > 0; x--) {
// assign current from/to variables for replace
var from = en_lang[x];
var to = other_lang[x];
// if value match do translation
if (value.match(from)) {
content(node, value.replace(from, to));
}
// mark this node as translated
if ($.browser.msie == 'false') {
$(node).data('translated', 'yes');
}
}
这可以完成工作,但速度很慢。经过大量研究,我发现我可以通过 join 命令将英文数组转换为基于列表的字符串。
但我无法想出一个函数来搜索此列表中的部分匹配,并返回列表中的位置。
我正在尝试这个 2006 年创建的旧 js 函数。但我不知道如何正确地恢复位置。
function listfind(list, value, delimiters) {
if (!delimiters) {
var delimiters = ','
}
_TempListSplitArray = list.split(delimiters)
var FoundIdx = 0;
for (i = 0; i < _TempListSplitArray.length; i++) {
if (_TempListSplitArray[i] == value) {
FoundIdx = i + 1;
break
}
if (value.match(_TempListSplitArray[i])) {
FoundIdx = i + 1;
break
}
}
return FoundIdx
}
感谢您的宝贵时间。
【问题讨论】:
-
:containsin jquery 处理部分搜索api.jquery.com/contains-selector 我唯一能想到的是它可能不适用于非元素,所以你可以考虑一下,stackoverflow.com/questions/1789945/javascript-string-contains希望有帮助 -
但这是一个选择器,我已经有了我需要的元素,现在我需要在当前文本节点内搜索部分匹配。
-
您是否有理由不能一起跳过数组的拆分/循环,而只是在大字符串上用正则表达式进行查找替换?
-
什么是“部分匹配”?你能提供一个带有具体价值的简短例子吗?
-
这就是这个问题的目的,找到一种不循环的方法。什么样的正则表达式?特别是因为我会将它们应用于保存当前节点文本的变量。
标签: javascript jquery language-translation