【发布时间】:2021-04-13 06:07:18
【问题描述】:
问题
我有大量的希伯来语文本(或任何其他语言,英语除外)。
由于客户端负责所有内容的输入,有时他有时会输入英文字符。
网站在wordpress中,客户端输入文字的位置是默认的内容区,所见即所得。
我需要找到每个英文字符/单词并将其包装起来。忽略 html 标签“”中的英文字符/单词并忽略 和这样的一切 >或 ©,以这种格式 &...;
示例文字
<div class="content">
<p>להאמית קרהשק this000 as well סכעיט דז מא, מנכם</p>
<p>טיק מונופץ קליר, בנפת נפקט</p>
<p>ת צשחמי צש בליא, מנסוטו צמלח</p>
<p>סילקרגשח. <a href="http://google.com">ותלברו חשלו text וחאית נו</a> עמחליף לורם איפסום</p>
<p>בעריר גק ליץ, ושבעגט more text here ליבם סולגק</p>
<p> </p>
<p> </p>
</div>
最终结果
使用 span 标签查找并包装每个匹配项,
<p>להאמית קרהשק this000 as well סכעיט דז מא, מנכם</p>
会变成
<p>להאמית קרהשק <span class="en">this000 as well</span> סכעיט דז מא, מנכם</p>
等等
我的解决方案
<script>
const to_english_regex = /(?<!<[^>]*)([0-9]+)?[a-z_-]+([0-9\s_-]+)?[a-z_-]+([0-9]+)?/ig
$('.to-english').html(function(_, html) {
return html.replace(to_english_regex, '<span style="font-family: futura;">$&</span>');
});
</script>
这似乎忽略了标签内的所有英文,但没有忽略 &...;代码类型。
Alos 似乎是 (?<!<[^>]*) 部分导致 IOS 设备出现问题。
任何帮助将不胜感激。
const to_english_regex = /(?<!<[^>]*)([0-9]+)?[a-z_-]+([0-9\s_-]+)?[a-z_-]+([0-9]+)?/ig
let html = document.getElementById('content').innerHTML
document.getElementById('result').innerHTML = "Result:<br><pre>" + html.replace(to_english_regex, '<span style="font-family: futura;">$&</span>') + "</pre>";
#result {background-color: lightblue;}
<div id="content">
<p>להאמית קרהשק this000 as well סכעיט דז מא, מנכם</p>
<p>טיק מונופץ קליר, בנפת נפקט</p>
<p>ת צשחמי צש בליא, מנסוטו צמלח</p>
<p>סילקרגשח. <a href="http://google.com">ותלברו חשלו text וחאית נו</a> עמחליף לורם איפסום</p>
<p>בעריר גק ליץ, ושבעגט more text here ליבם סולגק</p>
<p> </p>
<p> </p>
</div>
<div id="result">
</div>
【问题讨论】:
-
试试
text.replace(/(<[^>]+>|&#?\w+;)|(?!\s)[A-Za-z0-9\p{P}\p{S}\s]+(?<!\s)/ug, (x,y) => y || `<span style="font-family: futura;">${x}</span>` ) -
您的意思是找到“拉丁字符”吗?因为没有(明智的)正则表达式会在没有字典的情况下找到“英语”文本。
-
你有机会测试我的方法吗?
标签: javascript jquery regex