Я пытаюсь построить функцию, которая получает строку с этим форматом:
"привет, господин" **
* Может быть в любом месте строки.
Он должен вернуться:
<span>hello wor</span><input type='text'></input>
Таким образом, строка может быть "hel ** wor * d" также
и возвращение должно быть:
<span>hel</span><input type='text'> <span>wor</span><input type='text'><span>d</span>
Я мог бы сделать это легко с помощью цикла на каждом символе, но я ищу более элегантные решения.
Я думаю, что это можно было бы решить с помощью регулярного выражения, и с помощью замены я получил "*":
var text = "hello wor**";
text.replace(/\*+/g, "<input type='text'></input>");
Я еще не нашел способ захвата оставшегося текста для
<span>
Вы не используете результат функции replace
. Попробуй это:
var text = "*hel** wor*d*";
var element = text.split(/\s*\*+\s*/g);
element = "<span>"+ element.join("</span><input type='text'><span>") + "</span>";
element = element.replace(/<span><\/span>/g, "");
console.log(element);
'hello wor**'.replace(/\*+/g, "<input type='text'></input>");
Это возвращает hello wor
. Все, что вам нужно сделать, это конкатенация строки с остальными данными, которые вы хотите, например:
var text = "hello wor**";
text = '<span>' + text.replace(/\*+/g, '') + '</span><input type=\'text\'></input>';
<html>
<head>
</head>
<body>
<span id="hi">hello wor**</span>
</body>
</html>
Я использую jquery в этом
$( document ).ready(function() {
var texty = $('#hi').text();
$('#hi').replaceWith(texty.replace(/\*+/g, "<input type='text'></input>"))
});