2017-06-07 10 views
0

mailtoリンクを含むhrefタグを置き換えるJavascript関数を記述したいと思います。mailtoリンク(Javascript)を置き換えるための正規表現

<a href="mailto:[email protected]">Email me</a>! 

はなるはずです。

<a href="&lt;%='mailto:[email protected]'%&gt;">Email me</a>! 

これは、サードパーティのサービスにHTMLを供給するアプリケーションのためであり、サービスはそれがmailtoのURLを受け付けないことで壊れているが、私たちならばそれを変数としてマスクし、それを受け入れます。私はちょうどhrefタグの内側部分を置き換えるだけで、私の非正規のフレンドリーな脳をラップするのは苦労しています。

ご協力いただきありがとうございます。

+1

HTMLパーサーを使用する必要があります。 – SLaks

+1

ZA̡͊͠͝LGはregexを推奨しています - regexはHTML文書全体、または抽出されたアンカータグだけ、あるいはhref属性だけを扱うべきでしょうか? –

答えて

2

HTMLを完全に解析することはできませんが、HTMLパーサーを使用して、アンカータグのhref属性を解析して正規表現で置き換えることができます。

次の仕様は関連しています

と面積要素のhref属性は、潜在的にスペースで囲まれた 有効なURLである値を持っている必要があります。 ...

文字列は、 の後に空白文字を取り除いた後、有効なURLです。有効なURLです。 ...

URLは、WHATWG URL仕様のオーサリング適合性 要件に準拠する場合、有効なURLです。 [URL]

絶対URL文字列が[...]特別なスキームではなくASCIIのASCII大文字と小文字を区別しない一致するURL-スキーム文字列でなければなりませんhttp://w3c.github.io/html/single-page.html#valid-url

を参照してください。 U + 003A(続く "ファイル"、:)とスキーム相対-特殊URL文字列...

https://url.spec.what

堅牢な正規表現を参照してくださいは、このようにする必要がありため、大文字と小文字を区別しないマッチ大文字小文字を区別しないと受け入れ空白:

あなたはまた、アンカー要素を解析することができますが

let href = " MailTO:[email protected] "; 
 
let result = href.replace(/^\s*mailto:.*$/i, "&lt;%='$&'%&gt;"); 
 
console.log(result);
は、正規表現を持つ属性は、あなたのHTMLドキュメント内のアンカー要素を見つけるために、HTMLパーサを必要としています。とにかくHTMLパーサーが必要なので、アンカー要素とそのhref属性も抽出することができます。

関連する問題