Тип ответа:
1. "FieldValue" : "java is platform independent language"
2. "FieldValue" : "<div>java is platform indepnedant language</div>"
3. "FieldValue" : "https://www.oracle.com/index.html"
4. "FieldValue" : "<div>https://www.oracle.com/index.html </div>"
5. "FieldValue" : "<div> java is platform independent language for more info please visit https://www.oracle.com/index.html </div>"
--- Угловой код ---
<div *ngIf='isLink;else other_content'>
<a [innerHtml] = "news.FieldValue" target = "_blank ">{{news.FieldValue}}</a>
</div>
<ng-template #other_content>
<div [innerHtml] = "news.FieldValue">{{news.FieldValue}}> </div>
</ng-template>
--- функция javascript для проверки URL ---
if (new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?(/.*)?").test(news['FieldValue']))
{
this.isLink = true;
}
Я хочу, чтобы если поле FieldValue было ссылкой или URL-адресом, оно было интерактивным и открывало ссылку на новой вкладке, а если FieldValue - это план Text / HTML, то отображался в обычном теге div. Я использовал RegEx, чтобы найти, что FieldValue содержит URL-адрес или нет, но для типов ответа 4 и 5 это не сработало.
Получите лучший REST API, который обеспечивает более предсказуемые ответы.
Предоставленный вами код проверяет, содержит ли текст ссылку, но не извлекает ее из текста. У вас есть метод извлечения? Вы используете в нем одно и то же регулярное выражение?



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


сложно написать регулярное выражение для сложной строки, поэтому сначала упростите его. в вашем случае 4 или 5 вы можете сделать это шаг за шагом, как показано ниже:
вам нужно добавить ng-show, если это islink внутри тега гиперссылки, и ng-hide, если это ссылка внутри контейнера:
<a ng-href = "value" ng-show = "islink" >{{value}}</a>
<div ng-hide='islink' [innerHtml] = "value">{{value}} </div>
см. этот кусок
Решено с использованием
createTextLinks_(text) {
var container = document.createElement("p");
container.innerHTML = text;
var anchors = container.getElementsByTagName("a");
if (anchors.length>0){
return text;
}
else{
var plain_text = this.htmlToPlaintext(text);
return (plain_text || "").replace(/([^\S]|^)(((https?\://)|(www\.))(\S+))/gi,
function(match, space, url){
var hyperlink = url;
if (!hyperlink.match('^https?://')) {
hyperlink = 'http://' + hyperlink;
}
return space + '<a href = "' + hyperlink + '">' + url + '</a>';
}
);
}
};
Спасибо всем за ответы :)
используйте
ng-if = "islink"внутри тега гиперссылки иng-hide = "islink"в другом div.