![](/img/trans.png)
[英]How to Replace all strings in Javascript? In particular with Combination of special characters
[英]Can not replace a special combination of characters using javascript
我想刪除所有‍
從段落后面有字符“ا”。 我使用以下方法,但控制台說沒有找到這種組合。 請考慮這是波斯語單詞,字符“ا” ‍
在‍
當字符從右到左書寫時,字符“ا”之前的尾部證明它們連在一起。
$(document).ready(function(){ var htm=$("div").html(); var shouldRemove="‍ا"; if (htm.includes(shouldRemove)){ console.log('found'); } else{ console.log('not found'); } })
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
一種方法是使用下面的方法將‍ا
轉換為文本,並獲取div
的文本而不是其html,然后比較兩個文本:
$(document).ready(function(){ // get the text var div_txt = $("div").text(); var shouldRemove = "‍ا"; // put it as html in a span, then get it as text var rem_txt = $("<span>").html(shouldRemove).text(); if (div_txt.includes(rem_txt)) { console.log('found'); } else { console.log('not found'); } })
body { font-size:26pt }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
這里的問題是,當從DOM讀取HTML實體時,實體會被解析,因此字符序列‍
變成單個字符ZERO WIDTH JOINER。
如果要在命令行上運行JavaScript,您的方法將起作用:
$ node
> s = '<div>‍احترام</div>'
'<div>‍احترام</div>'
> s.includes("‍ا")
true
即使在瀏覽器中,如果您直接使用JavaScript控制台,也可以按照您的預期正常工作:
那么從DOM讀取(在您的情況下,使用jQuery)有什么不同? 要查看發生了什么,讓我們檢查字符串中的實際字符:
$(document).ready(function(){ var htm=$("div").text(); console.log(Array.from(htm)); console.log(Array.from("‍ا")); })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
這給出了:
啊哈,所以jQuery正在解析HTML實體! 因此,您要搜索的文本應該包含JavaScript zwj,而不是HTML。 像這樣指定:
$(document).ready(function(){ var htm=$("div").html(); var shouldRemove="\\u{200d}ا"; if (htm.includes(shouldRemove)){ console.log('found'); } else{ console.log('not found'); } })
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
現在輸出為true
。
所以RTL(文本方向)都很好! 事實證明,這只是HTML實體何時被解析的問題。 :)
而不是搜索實體‍
在HTML內部,在div
節點的文本值(而不是HTML)中搜索字符本身( 代碼點+ U200D ):
console.log("Found?", $("div").text().includes("\ا"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
如果您在控制台上記錄您的htm變量,它將o / p為:احترام,這就是為什么當您嘗試使用“ا”搜索它時,它會輸出為“未找到”。 請嘗試以下方法:
$(document).ready(function(){ var htm=$("div").html(); var shouldRemove="ا"; if (htm.includes(shouldRemove)){ console.log('found'); } else{ console.log('not found'); } })
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div>‍احترام</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.