我需要一个数组才能做到这一点:
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});
这是我在加载页面时遇到的错误:
答案 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
第一个捕获小组(\{([^\}]+)\})
\{
字面匹配字符{
([^\}]+)
[^\}]+
匹配下面列表中不存在的单个字符+
在one
和unlimited
次之间,尽可能多次,根据需要回馈[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();