Javascript将单词(不是单词的一部分)替换为西里尔字母
Javascript replace words (not part of word) in cyryllic
我需要在西里尔字符串中找到一些西里尔单词(只有单词,不是另一个单词的一部分)并将它们替换为另一个。但是我找不到解决这个案子的办法。
在英语中行得通:
'Slipknot not NOT'.replace(/'bNot'b/gi, 'TEST') // Slipknot TEST TEST
'целине не НЕ'.replace(/'bНе'b/gi, 'TEST') // still 'целине не НЕ'
我知道"/b"不是西里尔字母。我找到了这个解决方案:
'целине не НЕ'.replace(/'Не(?![A-я])/gi, 'ТЕСТ'); //"целиТЕСТ ТЕСТ ТЕСТ" when I want "целине TЕСТ ТЕСТ"
但是它替换了部分单词,我不需要替换部分单词
JS中的词边界'b
不能用于检测Unicode字母的词边界。它可以通过一个捕获组来实现,该捕获组包含匹配字符串开头或任何非单词(非俄语、非拉丁语、非数字、非下划线)字符的交替,并在单词之后,进行反向前瞻性检查,检查该范围是否存在。在替换部分,我们需要使用$1
反向引用来恢复单词之前匹配和捕获的文本。
document.write('целине не НЕ'.replace(/(^|[^A-ZА-ЯЁ0-9_])Не(?![A-ZА-ЯЁ0-9_])/gi, '$1ТЕСТ'));
注意Ё
不属于[А-Яа-я]
(甚至不属于[А-я]
)范围,因此需要单独添加。
在评论中回答你的问题,
这里的问题是,您需要匹配(=消耗)
'целине не НЕ нетак'.replace(/(^|[^A-ZА-ЯЁ0-9_])Не(?= )/gi, '$1TECT') //"целине TECT TECT нетак"
当我应该得到целине ТЕСТТЕСТнетак
Не
之后的空格,但是该空格可能是识别后续匹配的单词边界所必需的。在这种情况下,您可以依靠字符串反转解决方案:
function revStr(str) {
return str.split('').reverse().join('');
}
var s = 'целине не НЕ нетак';
var repl = 'ТЕСТ';
document.write(
revStr(
revStr(s).replace(/ еН(?=$|[^A-ZА-ЯЁ0-9_])/gi, revStr(repl))
));
相关文章:
- JavaScript Regex 将单词替换为其第一个字母,除非在括号内
- 使用Javascript/Jquery将单词替换为图像
- 将元素的单词替换为空字符串
- 将每个单词替换为标签
- 无法弄清楚如何修复单词替换javascript
- Javascript 正则表达式,用于用新单词替换多个单词
- 如何用一个单词替换每个单词
- javascript中单词替换的regex
- JS:用另一个单词替换链接.嵌套引号+转义码
- 如何在阿拉伯语 JavaScript 中用数组中的两个匹配单词替换两个单词
- HTML/CSS -长单词替换为
- 用javascript中的随机单词替换段落标签内容
- Jquery:仅用第一个单词替换字符串
- Jquery每2秒用数组中的单词替换文本
- 将文本中的单词替换为javascript,但如果该单词在更大的单词中则不替换
- 将数字和电子邮件地址之间的所有单词替换为小写字母,并用下划线分隔
- 将字符串中的所有单词替换为Javascript中的新HTML字符串
- 将字符串中找到的单词替换为大小写敏感(搜索和高亮显示)
- 替换如何将每个单词替换一次
- 将字符串中的单词替换为数组中的数据