2

需要以下帮助。

在javascript中,需要传递一个输入

例如:

str="<a href=www.google.com>Google</a>"; // this is for example actual input vary
// str is passed as parameter for javascript function

输出应检索为“Google”。

我在java中有正则表达式,它在其中运行良好。

String regex = "< a [ ^ > ] * > ( . * ? ) < / a > ";
Pattern p = Pattern.compile(regex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);

但在javascript中它不起作用。

我怎么能在Javascript中做到这一点。任何人都可以为我提供有关 javascript 实施的帮助。

4

7 回答 7

4

我认为您不想为此使用正则表达式。您可以像这样简单地尝试:-

<a id="myLink" href="http://www.google.com">Google</a>

    var anchor = document.getElementById("myLink");

    alert(anchor.getAttribute("href")); // Extract link

    alert(anchor.innerHTML); // Extract Text

示例演示

编辑:-(正如帕特里克埃文斯正确评论的那样)

var str = "<a href=www.google.com>Google</a>";
var str1 = document.createElement('str1');
str1.innerHTML = str;
alert(str1.textContent);
alert( str1.innerText);

示例演示

于 2013-10-03T18:25:26.407 回答
2

将 HTML 字符串插入到元素中,然后获取文本?

var str = "<a href=www.google.com>Google</a>";
var div = document.createElement('div');

div.innerHTML = str;
var txt = div.textContent ? div.textContent : div.innerText;

小提琴

在 jQuery 中,这将是:

var str = "<a href=www.google.com>Google</a>";
var txt = $(str).text();

小提琴

于 2013-10-03T18:26:54.213 回答
2

从你们给出的所有建议中,我得到了答案并为我工作

function extractText(){
var anchText = "<a href=www.google.com>Google</a>";
    var str1 = document.createElement('str1');      
    str1.innerHTML = anchText;
    alert("hi "+str1.innerText);
    return anc;
}

感谢大家的支持

于 2013-10-04T14:13:59.900 回答
1

只是要对此进行初步尝试,我可以更新这是您为您的问题添加更多测试用例或详细信息:

\w+="<.*>(.*)</.*>"

这与您提供的示例相匹配,此外,如果:

  • 变量名不同
  • 包裹文本的标签或标签内容不同

具体来说,如果您的 html 标记内有尖括号,这是可能的。

注意:正如其他答案所尝试的那样,使用 html 执行此操作是一个更好的主意,我只用正则表达式回答了这个问题,因为这是 OP 所要求的。对于 OP,如果您可以在没有正则表达式的情况下执行此操作,请改为执行此操作。尽可能不要尝试使用 javascript 解析 HTML,并且此正则表达式无法与完整的 html 解析器相媲美。

于 2013-10-03T18:23:55.130 回答
0

不需要正则表达式,只需使用DOMParser解析字符串并获取元素,然后使用 DOM 对象方法/属性

var parser = new DOMParser();
var str='<a href='www.google.com'>Google</a>"; 
var dom = parser.parseFromString(str,"text/xml");

//From there use dom like you would use document
var atags = dom.getElementsByTagName("a");
console.log( atags[0].textContent );

//Or
var atag = dom.querySelector("a");
console.log( atag.textContent );

//Or
var atag = dom.childNodes[0];
console.log( atag.textContent );

唯一要注意的是,低于 9 的 IE 不支持 DOMParser。

于 2013-10-03T18:32:01.440 回答
-2

好吧,如果您使用的是 JQuery,这应该是一件容易的事。

我只会创建一个不可见的 div 并在其上渲染此锚 ()。之后,您可以简单地选择锚点并获取它的内部文本。

$('body').append('<div id="invisibleDiv" style="display:none;"></div>'); //create a new invisible div
$('#invisibleDiv').html(str); //Include yours "str" content on the invisible DIV
console.log($('a', '#invisibleDiv').html()); //And this should output the text of any anchor inside that invisible DIV.

请记住,要这样做,您必须在页面上加载 JQuery。

编辑:仅当您的项目中已经有 JQuery 时才使用,因为如下所述,这样简单的事情不应该成为包含整个库的原因。

于 2013-10-03T18:26:58.947 回答
-3

假设您使用的是 java,从提供的代码。

我建议您使用JSoup来提取锚标记内的文本。
这是一个原因。使用正则表达式解析 HTML:为什么不呢?

String html = "<a href='www.google.com'>Google</a>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();

String linkHref = link.attr("href"); // "www.google.com"
String linkText = link.text(); // "Google""

String linkOuterH = link.outerHtml(); 
// "<a href='www.google.com'>Google</a>";
String linkInnerH = link.html(); // "<b>example</b>"
于 2013-10-03T18:29:08.993 回答