Я получаю строку, содержащую html-теги. Пример: «Здравствуйте, нажмите <u>здесь</u>». Я создаю функцию для их интерпретации с целью отрисовки ее в соответствии с нативной реакцией:
formating(text){
// Define regular expressions to match HTML tags
const boldRegex = /<b>(.*?)</b>/g;
const italicRegex = /<i>(.*?)</i>/g;
const underlineRegex = /<u>(.*?)</u>/g;
const lineBreakRegex = /<br\s?/?>/g;
let formattedText = text
.replace(boldRegex, (_, content) => <Text style = {{ fontWeight: 'bold' }}>{content}</Text>)
.replace(italicRegex, (_, content) => <Text style = {{ fontStyle: 'italic' }}>{content}</Text>)
.replace(underlineRegex, (_, content) => <Text style = {{ textDecorationLine: 'underline' }}>{content}</Text>)
.replace(lineBreakRegex, () => <Text>{'\n'}</Text>);
return <Text>{formattedText}</Text>
}
Проблема в том, что когда я показываю это в своем приложении:
<View>
{string.formating("my string")}
</View>
Это выдает мне «Привет, нажмите [объект Объект]»
Таким образом, ответ хорошо интерпретируется, и проблема возникает из-за замены, но найти решение невозможно.
Заранее спасибо за вашу помощь.
Да, именно, если здесь находится между <b>, как в html, выделите его жирным шрифтом.
Вероятно, этот ответ может помочь.
Сопоставление HTML с регулярным выражением — плохая идея. Вам лучше проанализировать его, а затем заменить теги...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Решением было использовать установку реакцииStringReplace с добавлением пряжи, реагирующей-строку-замену.
Вот новый код:
formating(text) {
const replacements = [
{ regex: /<b>(.*?)</b>/g, component: (match, i) => <Text style = {{ fontWeight: 'bold' }}>{match}</Text> },
{ regex: /<i>(.*?)</i>/g, component: (match, i) => <Text style = {{ fontStyle: 'italic' }}>{match}</Text> },
{ regex: /<u>(.*?)</u>/g, component: (match, i) => <Text style = {{ textDecorationLine: 'underline' }}>{match}</Text> },
{ regex: /<br\s?/?>/g, component: (match, i) => <Text>{'\n'}</Text> }
];
let formattedText = text;
replacements.forEach(({ regex, component }) => {
formattedText = reactStringReplace(formattedText, regex, component);
});
return <Text>{formattedText}</Text>;
}
Спасибо @Wiktor Stribiżew за этот трек.
Хотите отобразить текст примерно такого типа? Привет, нажмите здесь?