使用 Javascript 替换文本字符串中的某些阿拉伯语单词
Replace certain arabic words in text string using Javascript
我有一个阿拉伯语文本字符串,我想将一些单词设为粗体并在单词前添加图标
我对英文文本使用的方法是
var wordsToBold = ["Properties", "How To Use"];
function makeBold(input, wordsToBold) {
return input.replace(new RegExp('(\b)(' + wordsToBold.join('|') + ')(\b)', 'ig'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b></b>');
}
当我将此方法用于阿拉伯语单词时,它不起作用
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
测试文本:
فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا
يسكينج أليايت,سيت دو أيوسمود تيمبور
أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت
انيم أد مينيم فينايم,كيواس نوستريد
أكسير سيتاشن يللأمكو لابورأس
您可以建立自己的 Unicode 字边界:
- 左手(前导)单词边界模式可以定义为不紧跟字母 + 任何潜在变音符号或数字或下划线的位置:
(?<!\p{L}\p{M}*|[\p{N}_])
- 右手(尾随)字边界模式可以定义为不紧跟字母、数字或下划线的位置:
(?![\p{L}\p{N}_])
.
因此,您可以使用
var wordsToBold = ["Properties", "How To Use"];
function makeBold(input, wordsToBold) {
return input.replace(new RegExp('(?<!\p{L}\p{M}*|[\p{N}_])(?:' + wordsToBold.join('|') + ')(?![\p{L}\p{N}_])', 'igu'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>$&</b>');
}
console.log(makeBold("How To Use These Properties: 00How To Use These Properties00", wordsToBold));
// => <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>How To Use</b> These <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>Properties</b>: 00How To Use These Properties00
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
var arString = `فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور
أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت انيم أد مينيم فينايم,كيواس نوستريد
أكسير سيتاشن يللأمكو لابورأس`;
console.log(makeBold(arString, wordsToBold));
// => فرانكوا اراب <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>الخصائص</b>: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>طريقة الاستعمال</b>: وت انيم أد مينيم فينايم,كيواس نوستريد أكسير سيتاشن يللأمكو لابورأس
如果你想要一个更通用的 Unicode-aware \b
,你应该记住 ([\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]
),并记住 \b
可以是写成(?:(?<=^)(?=\w)|(?<=\w)(?=$)|(?<=\W)(?=\w)|(?<=\w)(?=\W))
,可以这样写:
const w = String.raw`[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const nw = String.raw`[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const uwb = String.raw`(?:(?<=^)(?=${w})|(?<=${w})(?=$)|(?<=${nw})(?=${w})|(?<=${w})(?=${nw}))`;
console.log(uwb);
makeBold
函数看起来像
const w = String.raw`[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const nw = String.raw`[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const uwb = String.raw`(?:(?<=^)(?=${w})|(?<=${w})(?=$)|(?<=${nw})(?=${w})|(?<=${w})(?=${nw}))`;
function makeBold(input, wordsToBold) {
return input.replace(new RegExp(`${uwb}(?:${wordsToBold.join('|')})${uwb}`, 'gu'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>$&</b>');
}
// Test
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
var arString = `فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت انيم أد مينيم فينايم,كيواس نوستريد أكسير سيتاشن يللأمكو لابورأس`;
console.log(makeBold(arString, wordsToBold));
请记住 u
标志 可以在 ECMAScript 2018+ 兼容 RegExp
中使用 Unicode 类别 类模式。
我有一个阿拉伯语文本字符串,我想将一些单词设为粗体并在单词前添加图标
我对英文文本使用的方法是
var wordsToBold = ["Properties", "How To Use"];
function makeBold(input, wordsToBold) {
return input.replace(new RegExp('(\b)(' + wordsToBold.join('|') + ')(\b)', 'ig'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b></b>');
}
当我将此方法用于阿拉伯语单词时,它不起作用
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
测试文本:
فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور
أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت انيم أد مينيم فينايم,كيواس نوستريد
أكسير سيتاشن يللأمكو لابورأس
您可以建立自己的 Unicode 字边界:
- 左手(前导)单词边界模式可以定义为不紧跟字母 + 任何潜在变音符号或数字或下划线的位置:
(?<!\p{L}\p{M}*|[\p{N}_])
- 右手(尾随)字边界模式可以定义为不紧跟字母、数字或下划线的位置:
(?![\p{L}\p{N}_])
.
因此,您可以使用
var wordsToBold = ["Properties", "How To Use"];
function makeBold(input, wordsToBold) {
return input.replace(new RegExp('(?<!\p{L}\p{M}*|[\p{N}_])(?:' + wordsToBold.join('|') + ')(?![\p{L}\p{N}_])', 'igu'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>$&</b>');
}
console.log(makeBold("How To Use These Properties: 00How To Use These Properties00", wordsToBold));
// => <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>How To Use</b> These <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>Properties</b>: 00How To Use These Properties00
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
var arString = `فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور
أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت انيم أد مينيم فينايم,كيواس نوستريد
أكسير سيتاشن يللأمكو لابورأس`;
console.log(makeBold(arString, wordsToBold));
// => فرانكوا اراب <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>الخصائص</b>: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . <br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>طريقة الاستعمال</b>: وت انيم أد مينيم فينايم,كيواس نوستريد أكسير سيتاشن يللأمكو لابورأس
如果你想要一个更通用的 Unicode-aware \b
,你应该记住 [\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]
),并记住 \b
可以是写成(?:(?<=^)(?=\w)|(?<=\w)(?=$)|(?<=\W)(?=\w)|(?<=\w)(?=\W))
,可以这样写:
const w = String.raw`[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const nw = String.raw`[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const uwb = String.raw`(?:(?<=^)(?=${w})|(?<=${w})(?=$)|(?<=${nw})(?=${w})|(?<=${w})(?=${nw}))`;
console.log(uwb);
makeBold
函数看起来像
const w = String.raw`[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const nw = String.raw`[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]`;
const uwb = String.raw`(?:(?<=^)(?=${w})|(?<=${w})(?=$)|(?<=${nw})(?=${w})|(?<=${w})(?=${nw}))`;
function makeBold(input, wordsToBold) {
return input.replace(new RegExp(`${uwb}(?:${wordsToBold.join('|')})${uwb}`, 'gu'),
'<br><br><i class="fas fa-ellipsis-h fa-xs mr-2"></i><b>$&</b>');
}
// Test
var wordsToBold = ["الخصائص", "طريقة الاستعمال"];
var arString = `فرانكوا اراب الخصائص: لوريم ايبسوم دولار سيت أميت ,كونسيكتيتور أدايبا يسكينج أليايت,سيت دو أيوسمود تيمبور أنكايديديونتيوت لابوري ات دولار ماجنا أليكيوا . طريقة الاستعمال: وت انيم أد مينيم فينايم,كيواس نوستريد أكسير سيتاشن يللأمكو لابورأس`;
console.log(makeBold(arString, wordsToBold));
请记住 u
标志 可以在 ECMAScript 2018+ 兼容 RegExp
中使用 Unicode 类别 类模式。