Javascript 在div中围绕希伯来语和英语文本
我试图在一段中的希伯来语和英语句子周围添加一个span标记。例如。 “那么,怎么了?” 将成为:Javascript 在div中围绕希伯来语和英语文本,javascript,html,regex,Javascript,Html,Regex,我试图在一段中的希伯来语和英语句子周围添加一个span标记。例如。 “那么,怎么了?” 将成为: [span]so[/span][span]היי[/span][span]all whats up[/span][span]אתכם[/span] 我一直在尝试使用regexp,但它只是删除了希伯来语单词,并在一个跨度内加入了英语单词 var str = 'so היי all whats up אתכם?' var match= str.match(/(\b[a-z]+\b)/ig); var
[span]so[/span][span]היי[/span][span]all whats up[/span][span]אתכם[/span]
我一直在尝试使用regexp,但它只是删除了希伯来语单词,并在一个跨度内加入了英语单词
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>')
var-str='sowייייאתכם
var match=str.match(/(\b[a-z]+\b)/ig);
var replace=match.join().replace(match.join(),“”+match.join()+“”)
根据您的判断,您可以尝试以下操作:((?:\s*\w++)+(?:\s*[\u0590-\u05FF]+)+(?=\s?[A-Za-z0-9!?])
您可能需要针对特定情况对其进行编辑(例如,如果一些非单词字符开始出现),但它确实起到了作用。它尝试从英语字符列表中匹配单词和句子,如果不起作用,它尝试从希伯来语字符列表中生成单词/句子,直到再次发现一个英语字符
它还不够完美,因为您可能需要添加其他标点符号,并且在第一个位置中有一些空格是您不需要的(因为javascript不支持lookbehind,所以我没有找到一个好方法来当场删除它们,但它们可以位于位置1并从字符串中删除)根据您的判断,您可以尝试以下内容:((?:\s*\w+++)+(?:\s*[\u0590-\u05FF]+)+(?=\s?[A-Za-z0-9!?])
您可能需要针对特定情况对其进行编辑(例如,如果一些非单词字符开始出现),但它确实起到了作用。它尝试从英语字符列表中匹配单词和句子,如果不起作用,它尝试从希伯来语字符列表中生成单词/句子,直到再次发现一个英语字符
它还不够完美,因为您可能需要添加其他标点符号,并且在第一个位置中有一些空格是您不需要的(因为javascript不支持lookbehind,所以我没有找到一个好方法来当场删除它们,但它们可以位于位置1并从字符串中删除)我认为您需要的正则表达式类似于
[^a-z^\u0591-\u05F4^\s]
。我不完全确定您希望如何处理空间
我的解决方案
将str
复制到新的varres
,替换所有非a-Z/希伯来语的字符。在
str
中的任何英文(a-z)字符上循环,并使用res.replace
将它们包装在span
中对希伯来文角色也要这样做 虽然还不是100%,但在我看来效果还不错
var str = 'so היי all whats up אתכם?';
var finalStr = str.replace(/([^a-z^\u0591-\u05F4^\s])/gi, '');
var rgx = /([a-z ]+)/gi;
var mat = str.match(rgx);
for(var i=0; i < mat.length; ++i){
var match = mat[i];
finalStr = finalStr.replace(match.trim(),'<span>'+match.trim()+'</span>');
}
rgx = /([\u0591-\u05F4 ]+)/gi;
var mat = str.match(rgx);
for(var i=0; i < mat.length; ++i){
var match = mat[i];
finalStr = finalStr.replace(match.trim(),'<span>'+match.trim()+'</span>');
}
document.getElementById('res').innerHTML = finalStr;
var str='soיייייאתכם?';
var finalStr=str.replace(/([^a-z^\u0591-\u05F4^\s])/gi';
var rgx=/([a-z]+)/gi;
var mat=str.match(rgx);
对于(变量i=0;i
我认为您需要的正则表达式类似于
[^a-z^\u0591-\u05F4^\s]
。我不完全确定您希望如何处理空间
我的解决方案
将str
复制到新的varres
,替换所有非a-Z/希伯来语的字符。在
str
中的任何英文(a-z)字符上循环,并使用res.replace
将它们包装在span
中对希伯来文角色也要这样做 虽然还不是100%,但在我看来效果还不错
var str = 'so היי all whats up אתכם?';
var finalStr = str.replace(/([^a-z^\u0591-\u05F4^\s])/gi, '');
var rgx = /([a-z ]+)/gi;
var mat = str.match(rgx);
for(var i=0; i < mat.length; ++i){
var match = mat[i];
finalStr = finalStr.replace(match.trim(),'<span>'+match.trim()+'</span>');
}
rgx = /([\u0591-\u05F4 ]+)/gi;
var mat = str.match(rgx);
for(var i=0; i < mat.length; ++i){
var match = mat[i];
finalStr = finalStr.replace(match.trim(),'<span>'+match.trim()+'</span>');
}
document.getElementById('res').innerHTML = finalStr;
var str='soיייייאתכם?';
var finalStr=str.replace(/([^a-z^\u0591-\u05F4^\s])/gi';
var rgx=/([a-z]+)/gi;
var mat=str.match(rgx);
对于(变量i=0;i
这里前面的答案没有说明整个单词的要求。事实上,很难做到这一点,因为
\b
单词边界不支持包含相邻希伯来语Unicode符号的单词边界,我们只能使用\u
符号与字符类匹配
我建议使用look aheads和capturing group来确保我们捕获整个希伯来语单词((^ |[^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])
,确保希伯来语单词之前有一个非希伯来语符号或字符串开头-如果希伯来语单词之间有空格,则添加一个\s
),\b[a-z\s]+\b
匹配用空格分隔的整个英语单词的顺序
如果您计划将
标记插入到围绕整个单词的句子中,以下函数可能会有所帮助:
var str='soיייייאתכם?';
//var str=‘那么,怎么了?’;
var result=str.replace(/\s*(\b[a-z\s]+\b)\s*/ig,$1');
结果=结果。替换(/(^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])/g,“$1$2”);
document.getElementById(“r”).innerHTML=result代码>
span{
背景:#FFCCCC;
边框:1px实心#0000FF;
}
前面的答案没有说明整个单词的要求。事实上,很难做到这一点,因为\b
单词边界不支持包含相邻希伯来语Unicode符号的单词边界,我们只能使用\u
符号与字符类匹配
我建议使用look aheads和capturing group来确保捕获整个希伯来语单词((^ |[^\u0590-\u05FF])([\u0590-\u05FF]+)(?![\u0590-\u05FF])
,确保在希伯来语单词之前有一个非希伯来语符号或字符串开头-添加