Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск в переменной и запуск функции (https://javascript.ru/forum/misc/68860-poisk-v-peremennojj-i-zapusk-funkcii.html)

dima85 14.05.2017 15:35

Поиск в переменной и запуск функции
 
Есть переменная:
string = "test((name1))testdfe((name2))";


Если там есть ((ИМЯ)) необходимо это заменить данными с document.getElementById(ИМЯ).innerHTML

Можно наверное через такую функцию менять данные. Но у меня проблемы с поиском в string этих ((*)).

function magija(name) {
 return document.getElementById(name).innerHTML;
}

Nexus 14.05.2017 18:43

var str='test((name1))testdfe((name2))';

alert(str.match(/\(\(\S+?\)\)/gim));

dima85 14.05.2017 20:25

Не нравится мне мой код, он работает, но какой-то он некрасивый.
Помогите пожалуйста сделать конфетку :)

<div id="name1">hello</div>
<div id="test">hello</div>


var str='test((name1))testdfe ((test))';
data = str.replace(str.match(/\(\(\S+?\)\)/gim)[0], document.getElementById(str.match(/\(\(\S+?\)\)/gim)[0].slice(2, -2)).innerHTML);
src = data.replace(str.match(/\(\(\S+?\)\)/gim)[1], document.getElementById(str.match(/\(\(\S+?\)\)/gim)[1].slice(2, -2)).innerHTML);
alert(src);

ksa 15.05.2017 09:01

dima85, так пойдет?

<div id="name1">hello name1</div>
<div id="test">hello test</div>
<script type='text/javascript'>
var str='test((name1))testdfe ((test))';
var arr=str.match(/\(\(\S+?\)\)/gim);
for (var i=0; i<arr.length; i++) {
	var id=arr[i].match(/[^()]+/);
	var txt=document.getElementById(id).innerHTML
	str = str.replace(new RegExp('\\(\\('+id+'\\)\\)','gim'), txt);
};
alert(str);
</script>

dima85 15.05.2017 09:26

Значительно лучше. Спасибо

ruslan_mart 15.05.2017 12:21

var str = "test((name1))testdfe((name2))";

str = str.replace(/\(\(([\w-]+)\)\)/g, function(matches, id) {
    var elem = document.getElementById(id);
    return elem ? '((' + elem.innerHTML + '))' : matches;
});


Часовой пояс GMT +3, время: 12:17.