1

我有这个 javascript 字符串:

"<!--:fr-->Photos<!--:--><!--:en-->Pictures<!--:-->"

而且我需要解析它以获取不同字符串中的每种“语言”。理想的情况是具有如下功能:

function getText(text, lang){
    // get and return the string of the language "lang" inside the multilang string "text"
}

我可以这样称呼:

var frenchText = getText("<!--:fr-->Photos<!--:--><!--:en-->Pictures<!--:-->","fr");
// and would return:
// frenchText = Photos

如果有人知道这样做的好方法,可能使用一个非常棒的正则表达式!

4

3 回答 3

7

我认为不需要太多解释;您只需lang为您的正则表达式添加一个模板并获得第一个 backref(该(.*?)部分)。我不相信您提供的字符串的任何部分都构成保留字符。请注意,如果找不到匹配项,您可以包含一些错误处理,但我将把它留给 OP:

function getText(text, lang) {
  // Builds regex based on supplied language
  var re = new RegExp("<!--:" + lang + "-->(.*?)<!--:-->");

  // Returns first backreference
  return text.match(re)[1];
}
getText("<!--:fr-->Photos<!--:--><!--:en-->Pictures<!--:-->", "fr");
// returns "Photos"
于 2011-06-29T12:20:58.150 回答
0

最好有 PHP 设置的语言:

var lang = '<?php echo qtrans_getLanguage(); ?>';
function getText(text) {
  // Builds regex based on supplied language
  var re = new RegExp("<!--:" + lang + "-->(.*?)<!--:-->");

  // Returns first backreference
  return text.match(re)[1];
}
getText("<!--:fr-->Photos<!--:--><!--:en-->Pictures<!--:-->");
于 2012-11-27T19:25:07.437 回答
0

正如来自顶部的评论者所问的那样:对于像 [:fr]french[:en]english[:] 这样的字符串,您可以使用以下内容:

function getText(mtext, lang) {
     // Builds regex based on supplied language
    var re = new RegExp("\\[:" + lang + "\\](.*?)\\[:","s");                          
    
    // Returns first backreference
    return mtext.match(re)[1];
}
于 2021-09-04T22:45:36.377 回答