タイトルはかなり説明しています。私は、JavaScriptで特定の単語(例: 'the')が出現するたびに、ユーザー定義の単語または語句(例: 'great')を追加したいと考えています。したがって、HTMLのテキストに「the」と表示されるたびに、JavaScriptが「最大」(blah blah blah、blah blah)を挿入します。私はこれを正規表現を使って把握しようとしていましたが、HTMLに直接追加するのには至りませんでした。特定の単語のすべてのインスタンスの後にHTMLとフレーズを検索する
答えて
確かに、正規表現はそれを行うにはうってつけです。テキストを置き換えるためにString.replace()機能を使用することができます。
ここsomeString.replace(/\b(the)\b/ig, "$1 greatest");
、\b
は、単語の境界(スペース、ピリオドなど)を表し、「オット最大のR」、周りの括弧 "と「その他」の交換を回避しますあなたはそれを選択することができます(置換で使用するには、$1
を使用してください)。次に、i
とg
は、正規表現の大文字と小文字を区別しないようにするためのフラグです(複数の出現を探します)。
しかし、ほとんどの作業を行う必要はありません。要素のテキストを置き換えると、実際のHTMLが妨げられる可能性があります。それを避けるために、あなただけのターゲットテキストノードへの再帰関数を適用することができます
document.getElementById('btn').addEventListener('click', function() {
doReplace(/\b(the)\b/ig, "$1 greatest", document.body);
this.style.visibility = 'hidden';
});
function doReplace(search, replacement, element) {
if (element.nodeType == 3) { // if the element is a text node, replace the content
element.nodeValue = element.nodeValue.replace(search, replacement);
} else { // otherwise, apply this function to all children
var children = element.childNodes;
for (var i = 0; i < children.length; i++) {
doReplace(search, replacement, children[i]);
}
}
}
<button id="btn">Add "greatest"!</button>
<h1>The pie was cold</h1>
<p>I was at the restaurant the other day, and the waiter took my order. The problem? My pie was cold!</p>
ここでは、あなたがしたいことをするいくつかのコードがあります。それは感覚的なので "オレンジ"を変更しないことに注意してください。スクリプト要素に存在するため、アラートされた「オレンジ」は変更されません。
function getTextNodesThatContain(text) {
var textNodes = $(document).find(":not(iframe, script, style)")
.contents().filter(
function() {
return this.nodeType == 3
&& this.textContent.indexOf(text) > -1;
});
return textNodes;
};
$(document).ready(function() {
getTextNodesThatContain("the").each(function(ind, item) {
item.nodeValue = item.nodeValue.replace("the", "the greatest");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
This is the apple.
<div> this is the orange. </div>
<script>
function alertme() {
alert("the orange");
}
</script>
<a href="javascript:alertme()">The orange</a>
私の提案は、本体内のすべてのテキストノードを検索するためにTreeWalkerを使用することです:
function replaceTextInPage(el, txtMatch, txtToReplace) {
txtToReplace = (txtToReplace.length > 0) ? ' ' + txtToReplace : '';
var walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
while (n = walk.nextNode()) {
if (n.textContent.trim().length > 0) {
n.textContent = n.textContent.replace(new RegExp(txtMatch, "gi"), txtMatch + txtToReplace);
}
}
}
window.onload = function() {
document.getElementById('btn').addEventListener('click', function() {
replaceTextInPage(document.body, document.getElementById('txtToFind').value, document.getElementById('txtToAdd').value)
}, false);
}
<button id="btn">Replace string</button><br/>
Text to search: <input id="txtToFind" type="text" value="the"><br/>
Text to add at the end: <input id="txtToAdd" type="text" value="greatest"><br/>
<div style="width: 100%;height: 100px;">It seems to only remove <span style="color: red;">the</span> first occurrence of abc in <span style="color: red;">the</span> string above. How can I replace all occurrences of it?</div>
私は前にtreeWalkerについて聞いたことがありません。これは私が調べなければならないものです。 – Zuse
このジョブを動的に実行するには、 yは私たち自身のString.prototype.affix()
メソッドを発明しています。この新しいメソッドはあなたが望むことを行い、最後の引数がtrue
ならば、最後に添え字(2番目の引数)に添え字を付け、検索された部分文字列(最初の引数)の先頭にfalse
がある場合は貼り付けます。最後のパラメータにデフォルト値としてtrue
を割り当てました。
String.prototype.affix = function(s,a,b = true){
var r = new RegExp(s,"g");
return b ? this.replace(r,"$&" + " " + a)
: this.replace(r,a + " " + "$&");
}
console.log("this is the book and the author is him".affix("the", "greatest",true));
- 1. Lucene:検索語としての複数単語のフレーズ
- 2. フレーズを検索して検索し、その前後にある2つの単語を取得します
- 3. RichTextBoxで検索し、その特定の単語のすべてのインスタンスをハイライト表示する方法
- 4. 単語の配列の特定のフレーズを効率的に検索するには?
- 5. Goを使用して特定の単語を検索する
- 6. シェルで特定の単語の後に単語の検索を開始するには?
- 7. 特定のフレーズのテーブルを効率的に検索する
- 8. を検索するiOSアプリケーションの特定の単語のUITextViewを検索
- 9. Elasticsearch入力単語とすべての類義語を検索
- 10. 私のtxtファイル内の特定の単語を検索する
- 11. raw_inputで特定の単語を検索するには?
- 12. テキストファイルで特定の単語を検索するには
- 13. テキストファイルのフレーズを検索し、C#で次の単語を読む
- 14. セットポイントで特定の文字の単語を検索する(Java)
- 15. VBA文字列内の特定の単語を検索する
- 16. セールスフォースでSOSLを使用してフレーズの単語を検索する方法は?
- 17. Notepad ++ Newbie - 特定の単語の後にすべてを削除するには?
- 18. PHPファイル内で特定の単語を検索する
- 19. フレーズ内の特定の単語を見つける方法は?
- 20. .txtファイル内のすべての単語を検索するC#
- 21. 5x5行列内のすべての単語を検索する
- 22. Laravel 5.5のすべてのブレードビュー内の特定の単語を検索するには
- 23. Android:Jsoupで単語やフレーズを検索する方法
- 24. 構造体リスト内の単語を検索し、すべての単語を後置式で取得する
- 25. テキストファイルから1行の単語を検索するときに、特定の単語が表示されない
- 26. 単語の発音順列をすべて検索する
- 27. 要素文字列内の特定の単語に基づいてHTML要素を検索する
- 28. すべての文字が別の単語に含まれているファイル内の単語を検索する
- 29. solrフレーズ検索で単語の相対位置を区別する方法
- 30. 特定の単語の出現に対して特定のファイルの履歴を検索できますか?
これは、私が探していたまさに感謝です! – Zuse