使用数组替换多个字符串

时间:2015-05-07 10:21:38

标签: javascript php jquery arrays

我需要一个数组才能做到这一点:

Hi {nom}, you can buy {var1}

在发送之前看起来像这样:

Hi Manuel, you can buy chips.

我试图用这样的数组做到这一点:

$(document).on('click','.submitMessage', function(){

    prevContent=$('textarea').val();

    $variables = array(
        '{nom}' => 'Manuel',
        '{apl}' => 'García',
        '{var1}' => 'chips',
        '{var2}' => 'deportes y aventura',
        '{var3}' => 'informática y tecnología',
        '{cst1}' => 'Serrano, 28',
        '{cst2}' => 'Plaza del carmen, 32',
        '{cst3}' => 'García Luna, 15'
    );

    $data = prevContent;
    $data = str_replace(array_keys($variables), array_values($variables), $data);

    $.post('../actions/newMessage.php',{ms_content:$data});

这是我在加载页面时遇到的错误:

error

4 个答案:

答案 0 :(得分:4)

您正在使用PHP而不是Javascript:

您可以按照以下方式执行此操作

        prevContent='Hi {nom}, you can buy {var1}';

        variables = {
            '{nom}' : 'Manuel',
            '{apl}' : 'García',
            '{var1}' : 'chips',
            '{var2}' : 'deportes y aventura',
            '{var3}' : 'informática y tecnología',
            '{cst1}' : 'Serrano, 28',
            '{cst2}' : 'Plaza del carmen, 32',
            '{cst3}' : 'García Luna, 15'
        };

        $.each(variables, function (key, value) {
            prevContent = prevContent.replace(key, value);
        });

        console.log(prevContent);

答案 1 :(得分:3)

像这样:

'Hi {nom}, you can buy {var1}'.replace(/(\{([^\}]+)\})/gi, function($0, $1, $2){
  return { nom: 'Manulal', var1: 'chips' }[$2] || $1;
});

稍微解释regex101.com

/(\{([^\}]+)\})/gi

  • 第一个捕获小组(\{([^\}]+)\})
    \{字面匹配字符{

    • 第二捕获组([^\}]+)
      [^\}]+匹配下面列表中不存在的单个字符
      量词: +oneunlimited次之间,尽可能多次,根据需要回馈[greedy]
      \}字面匹配字符}

    \}匹配字符}字面上

g modifier:全球。所有比赛(第一场比赛都没有回复)
i modifier:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)

答案 2 :(得分:2)

您正在混合使用jQuery和PHP,请执行以下示例:

var _str = "Hi {nom}, you can buy {var1}";
var _final = _str.replace(/\{nom\}/, 'Manuel')
                .replace(/\{var1\}/, 'chips');

// _final = Hi Manuel, you can buy chips

DEMO 或替代方案:

var _str = "Hi {nom}, you can buy {var1}";
// Add as many value as you want to search and replace
var _replace = {'{nom}':'Manuel', '{var1}':'chips'};
var _final = '';
for( var i in _replace ) {
    var _regx = new RegExp(i, 'g');
    _final = _str.replace(_regx, _replace[i]);
}

alert(_final);

答案 3 :(得分:0)

您需要实现的目标也可以使用这种替代方案和更通用的方式来实现:

Toast.makeText(PhotoListActivity.this, "ok", Toast.LENGTH_LONG).show();