2015-08-20 33 views
1

嘿,這可能已經問過其他地方,但我無法找到它。使用正則表達式從字符串中刪除一個href標籤

本質上,我只是試圖從javascript中使用正則表達式中的字符串中刪除一個標記。

所以我有這樣的:

<a href="www.google.com">This is google</a> 

和我所要的輸出僅僅是「這是谷歌」。 這將如何使用正則表達式在JavaScript中完成? 在此先感謝!

SOLUTION:

好了,所以我是從我的老闆提供的解決方案去如下

這樣做有兩個部分的最佳方式。一個是刪除所有結束標籤。然後,您將需要關注移除開始標記。應該如下所示:

/<a\s+.*?>(.*)<\/a>/ 

使用。*?爲匹配/任何的非貪婪版本/

+0

你明白這個作爲一個字符串或者這是你的HTML代碼的一部分? – George

+0

@GeorgeRappel作爲一個字符串 – sagnew

回答

2

這不應該用正則表達式都做了,但像這樣的例子:

var a = document.querySelectorAll('a'); 
 
var texts = [].slice.call(a).map(function(val){ 
 
    return val.innerHTML; 
 
}); 
 
console.log(texts);
<a href="www.google.com">this is google</a>

如果你只有多<a href...>一個字符串,你可以先創建一個元素

var a_string = '<a href="www.google.com">this is google</a><a href="www.yahoo.com">this is yahoo</a>', 
 
el = document.createElement('p'); 
 
el.innerHTML = a_string; 
 
var a = el.querySelectorAll('a'); 
 
var texts = [].slice.call(a).map(function(val){ 
 
    return val.innerHTML; 
 
}); 
 
console.log(texts);

0

我不知道你的情況,但是如果你使用的是javascript,你可能可以通過innerHTML得到元素的內部。因此,element.innerHTML可能會輸出This is google

的原因是正則表達式真的isn't meant to parse HTML.

如果你真的想要一個正則表達式,在這裏你去:

pattern = />(.*)</; 
string = '<a href="www.google.com">This is google</a>'; 
matches = pattern.exec(string); 
matches[1] => This is google 

這將使用匹配組進去><的東西。這不適用於所有情況,我保證。

-1

還有一種方法,使用捕獲組。所以,你基本上匹配所有,但只搶一個結果:

var re = /<a href=.+>(.+)<\/a>/; 
    var str = '<a href="http://www.somesite.com">this is google</a>'; 
    var m; 

    if ((m = re.exec(str)) !== null) { 
     if (m.index === re.lastIndex) { 
      re.lastIndex++; 
     } 

    } 
console.log(m[1]); 

https://regex101.com/r/rL0bT6/1注:由regex101創建的代碼。

演示:http://jsfiddle.net/ry83mhwc/

0

與lookahead.Get試試這個第一個捕獲組。

(?=>).([^<]+) 

檢查Demo

相關問題