我试图在段落中的希伯来语和英语句子周围添加一个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/

10-09 17:36