2017-07-08 5 views
-1

私の正規表現は、foo-で始まるすべての単語を見つけて削除する必要があります。正規表現は、オンラインの正規表現http://regexr.com/3gafiで動作しますが、私のjavascriptで失敗します。正規表現はオンラインテストではマッチしますが、JavaScriptの実行ではマッチしませんか?

What's going wrong?

$('[class*="foo-"]').each(function(index, ele) { 
 

 
\t ele.className = ele.className.replace(/(foo-.*(|\0))/g, ''); 
 
    console.log(ele.className); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo-abc img-responsive"></div> 
 

 
<div class="foo-abc"></div> 
 

 
<div class=" foo-abc"></div> 
 

 
<div class=" foo-abc "></div>

答えて

1

(\bfoo-.*?(?= |$)作品です。あなたはfooで始まる単語だけを削除し、それ以外のものは削除しないようにしたいでしょう。先読みはそれを助けます。

$('[class*="foo-"]').each(function(index, ele) { 
 

 
\t ele.className = ele.className.replace(/(\bfoo-.*?(?= |$))/g, ''); 
 
    console.log(ele.className); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo-abc img-responsive"></div> 
 

 
<div class="foo-abc"></div> 
 

 
<div class=" foo-abc"></div> 
 

 
<div class=" foo-abc "></div>

私はあなたがimg-responsiveを保持したいと想定。そうでない場合は、先読みを削除し、貪欲でないマッチを貪欲なマッチに変換してください(*)。

0

$('[class*="foo-"]').each(function(index, ele) { 
 

 
\t ele.className = ele.className.replace(/(foo-.*(|\0)?)/g, ''); 
 
    console.log(ele.className); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo-abc img-responsive"></div> 
 

 
<div class="foo-abc"></div> 
 

 
<div class=" foo-abc"></div> 
 

 
<div class=" foo-abc "></div>

それがお役に立てば幸いです。

0

あなたの例の正規表現は置き換えられません。以下を使用してください:/(foo-[^ "]+ ?)/g

関連する問題