0

単純な文字列を別の文字列に置き換える方法があれば、非常に簡単なタスクを達成しようとしています。

ページの HTML ソースを文字列として持っています。<a href="#about">、<a href="#contact">、<a href="#top">、<a href="#bottom">、<a href などのいくつかの内部アンカーが含まれています。 ="#who-we-are"> など

すべてのアンカーは配列 (['about','contact'],...) に格納されており、次のような文字列をすべて削除する必要があります。

href="#なんでも"

(毎回何かが違うものは何でも)結果が <a> になるように

単純な検索と置換で行うことは、配列を反復処理して、出現するたびに置換することです

'href="'+アンカー名+'"'

空の文字列で。しかし、string.replace() を何度も試した後でも、これを達成する方法が見つかりません。


言い換えれば(コメントにも投稿されています):私の質問をもっと簡単に言うと、次のようになります。

私の文字列に次の3つの文字列が含まれているとします

<a href="#contact"> <a href="#what"> <a href="#more">

Javascript を使用してそれらを (同じパターンのタグではなく) <a> に置き換えるにはどうすればよいですか?

4

5 に答える 5

0

1 つの特定のステートメントは次のようになります。

var mystring = '<a href="#thistag"> <a href="#thattag">';
var repstring = mystring;
var myarray = ['thistag', 'theothertag'];

for (var i = 0; i < myarray.length; i++) {
  var reptag = myarray[i];
  repstring = repstring.replace('a href="#' + reptag + '"', 'a');
}

次にrepstring、最終文字列が含まれます。二重引用符が HTML テキストの一部として通常の場所にあることを保証するために、一重引用符と二重引用符が交互になっていることに注意してください。明らかに、文字を含めるようにreptag(つまり、の内容を)変更できます。その時点で、一致するように行を変更します。myarray#mystring.replace(...)

于 2013-08-14T15:18:35.683 に答える
0

私があなたを正しく理解していれば、正規表現を使用してそれらすべてを置き換えることができます。

var tagString = '<a href="#contact"> <a href="#what"> <a href="#more">';

// Find every occurrence which starts with '#' and ends with '"'
var regEx = new RegExp('#.*?"', 'g'); 

// Replace those occurrences with '"' to remove them
tagString = tagString.replace(regEx, '"');

編集:

配列内の特定のタグを置き換えるには、次の操作を実行できます。

var tags = ['<a href="#a">', '<a href="#b">', '<a href="#c">'];
var tagsToReplace = ['a', 'c'];

for (var i = 0, len = tags.length; i < len; i++) {
    var matches = tags[i].match(/#.*"/);
    if (matches === null) {
        continue;
    }

    var anchor = matches[0].substr(1).replace('"', ''); // Get only the anchor
    if (tagsToReplace.indexOf(anchor) !== -1) {
        tags[i] = tags[i].replace('#' + anchor, 'replaced');
    }
}
于 2013-08-14T15:11:06.107 に答える
0

すべての提案に感謝します。それらのさまざまなバリエーションを試してみたところ、Firefoxでは機能するがChromeでは機能しないものがあることに気付き、このスレッドにたどり着きました

javascript が Chrome または IE でグローバル フラグを置き換えないのはなぜですか? また、それを回避するにはどうすればよいですか?

それが解決策につながりました:

for (var i=0; i < myTags.length ; i++)
{
        var find = 'href="#' + myTags[i] + '"';
        var regex = new RegExp(find, 'gi');
        MyWholeString = MyWholeString.replace(regex, '');
}
于 2013-08-15T06:20:39.113 に答える