2016-11-10 6 views
0

テキストのすべての単語をスパンで囲むために、正規表現を見つけようとしています。私は次のコードを使用しています:img要素を除いて、範囲内のすべての単語をラップする正規表現

$this.html($this.text().replace(
     /([^\s]*\s)/g, "<span>$1</span>")); 

ここでこれはdiv要素と呼ばれています。しかし、div内にあるimgとa要素は消えます。私は、正規表現を変更しようとしました:

$this.html($this.text().replace(
     /([^(\s | <a.*/a> | <img.*/img>)]*\s)/g, "<span>$1</span>")); 

私は問題を解決しませんでした。

誰かが私を助けることができますか?

+0

チェックhttp://stackoverflow.com/questions/20689220/wrap-character-in-string-excluding-a-link-tag-with-javascript-regex –

+0

あなたがしようテキストのみを囲みますか?htmlマークアップのサンプルを提供します – guradio

+2

テキストではなく要素の単語にのみ作用する場合は、テキストノードのみを処理する必要があります。 jQueryは、テキストノードレベルで動作する少数のものしか提供していません。[contents'](http://api.jquery.com/contents)関数は、(要素だけでなく)すべてのノードを返します。コンテナ。テキストノードをスパンで置き換えて 'each'でループすることができます。これには、 'insertBefore'のようなDOMメソッドを使う必要があります。それは自明ではありませんが、難しいものではありません。私は妥当なデモを盛り上げる時間がないので、コメントとして投稿する。 –

答えて

-2

は、空白(\S)を置き換えます。この場合、1つ以上の関数(+)には、一致するものをパラメータとして使用します。

var str = 'Hello dear world <img src="https://placeholdit.imgix.net/~text?txtsize=60&txt=1&w=100&h=100"/> Hello dear world <img src="https://placeholdit.imgix.net/~text?txtsize=60&txt=1&w=100&h=100"/>'; 
 

 
function replaceThings(str) { 
 
    var pre = "<span style='background-color:yellow'>"; 
 
    var modString = str 
 
    .replace(/\S+/ig, function(word) { 
 
     return pre + word + "</span>" 
 
    }) 
 
    .split(pre + "<img").join("<img") 
 
    .split("/></span>").join("/>") 
 
    .replace(/<img{1}.*?\/>/ig, function (img){ 
 
    return img.split(pre).join("").split("</span>").join("") 
 
    }) 
 

 
    return modString; 
 
} 
 
console.log(replaceThings(str)); 
 

 
document.body.innerHTML = replaceThings(str)

+0

お返事ありがとうございます。私はテキストがギリシャ語で書かれているので、/ \ S +/igの代わりに/([^ \ s] * \ s)/ gを使用しています。 – themis93

関連する問題