有没有一种方法可以在Unicode文本中普遍应用replace方法(这里涉及阿拉伯语)?在下面的示例中,虽然在英语文本中替换整个单词效果很好,但无法检测并因此替换阿拉伯语单词。我添加了u作为标记以启用Unicode解析,但没有帮助。在下面的阿拉伯语示例中,应该替换单词“النجوم”,但不是“والنجوم”,但这并没有发生。
<!DOCTYPE html>
<html>
<body>
<p>Click to replace...</p>
<button onclick="myFunction()">replace</button>
<p id="demo"></p>
<script>
function myFunction() {
var str = "الشمس والقمر والنجوم، ثم النجوم والنهار";
var rep = 'النجوم';
var repWith = 'الليل';
//var str = "the sun and the stars, then the starsz and the day";
//var rep = 'stars';
//var repWith = 'night';
var result = str.replace(new RegExp("\\b"+rep+"\\b", "ug"), repWith);
document.getElementById("demo").innerHTML = result;
}
</script>
</body>
</html>
无论您提供什么解决方案,请确保使用变量,就像您在上面的代码中看到的那样(上面的变量rep
),因为这些要替换的单词是通过函数调用传递的。
更新:要尝试上面的代码,请将此处的代码替换为上面的代码。
[\u0621-\u064A\u0660-\u0669 ]
可能有效?不过还没有完全测试和研究... - Tom LordindexOf
进行测试,并对匹配长度进行比较,以确保完全匹配。 - mohsenmadi(?:(?:^|(?<=\W))(?=\w)|(?<=\w)(?:$|(?=\W)))
。在JS中,这将转换为非常复杂的替换,使用\uDDDD
符号,因为JS只知道UTF-16符号,不知道Unicode单词边界是什么。认为这将涵盖所有Unicode是不现实的。我有覆盖所有Unicode的正则表达式,但它很棘手。如果你需要,请告诉我。请注意,[\pL0-9_]
并不代表所有Unicode单词字符,它忽略了约3,000个有效单词。 - user557597