我试图在段落中的希伯来语和英语句子周围添加一个span标签。例如。
“那么הייאתכם怎么了?”
会变成 :
[span]so[/span][span]היי[/span][span]all whats up[/span][span]אתכם[/span]
我一直在尝试使用正则表达式,但是它只是删除了希伯来语单词,并且一次跨入了英语单词。
var str = 'so היי all whats up אתכם?'
var match= str.match(/(\b[a-z]+\b)/ig);
var replace = match.join().replace(match.join(),'<span>'+match.join()+'</span>')
最佳答案
以前的答案在这里并不能说明整个单词的要求。的确,这很难实现,因为\b
单词边界不支持带有相邻希伯来Unicode符号的单词边界,而我们只能使用\u
表示法将其与字符类匹配。
我建议使用前瞻性和捕获组来确保捕获整个希伯来语单词((^|[^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])
,以确保在希伯来语单词之前有一个非希伯来符号或字符串开头-如果有空格,请添加一个\s
希伯来语单词之间!)和\b[a-z\s]+\b
来匹配用空格分隔的整个英语单词的序列。
如果您打算将<span>
标记插入整个单词周围的句子中,则此功能可能会有所帮助:
var str = 'so היי all whats up אתכם?';
//var str = 'so, היי, all whats up אתכם?';
var result = str.replace(/\s*(\b[a-z\s]+\b)\s*/ig, '<span>$1</span>');
result = result.replace(/(^|[^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])/g, '$1<span>$2</span>');
document.getElementById("r").innerHTML = result;
span {
background:#FFCCCC;
border:1px solid #0000FF;
}
<div width="645" id="r"/>
结果:
<span>so</span><span>היי</span><span>all whats up</span><span>אתכם</span>?
如果您的输出中不需要任何标点符号或字母数字实体,只需将整个英语和希伯来语单词连接在一起,然后使用
var str = 'היי, User234, so 222היי all whats up אתכם?';
var re = /(^|[^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])|(\b[a-z\s]+\b)/ig;
var res = [];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
if (m[1] !== undefined) {
res.push('<span>'+m[2].trim()+'</span>');
}
else
{
res.push('<span>'+m[3].trim()+'</span>');
}
}
document.getElementById("r").innerHTML = res.join("");
span {
background:#FFCCCC;
border:1px solid #0000FF;
}
<div width="645" id="r"/>
结果:
<span>היי</span><span>so</span><span>היי</span><span>all whats up</span><span>אתכם</span>
关于javascript - 在div中环绕希伯来语和英语文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41824774/