javascript - 从字符串中的数组中查找单词,仅限整个单词(带有希伯来语字符)

标签 javascript regex

我必须构建一个 RegExp 对象,它将从数组中搜索单词, 并且只会找到整个单词匹配。

例如 我有一个单词数组('יל','ילד'), 并且我希望 RegExp 找到“a”或“♬

这是我的代码:

var text = 'ילד ילדדד יל';
var matchWords = ['יל','ילד'];
text = text.replace(/\n$/g, '\n\n').replace(new RegExp('\\b(' + matchWords.join('|') + ')\\b','g'), '<mark>$&</mark>');
console.log(text);

我尝试过的:

我试过这段代码:

new RegExp('(יל|ילד)','g');

它工作得很好,但它也能找到像“ילדדדד”这样的词,我只需要匹配整个词。

我也试过这段代码:

new RegExp('\\b(יל|ילד)\\b','g');

但是这个正则表达式没有找到任何单词!

我应该如何构建我的 RegExp?

最佳答案

单词边界\b不支持 Unicode。使用 XRegExp构建 Unicode 字边界:

var text = 'ילד ילדדד יל';
var matchWords = ['יל','ילד'];
re = XRegExp('(^|[^_0-9\\pL])(' + matchWords.join('|') + ')(?![_0-9\\pL])','ig');
text = XRegExp.replace(text.replace(/\n$/g, '\n\n'), re, '$1<mark>$2</mark>');
console.log(text);
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>

在这里,(^|[^_0-9\\pL])是 ID=1 的捕获组,匹配字符串开始或除 Unicode 字母、ASCII 数字或 _ 以外的任何字符(前导词边界)和 (?![_0-9\\pL])如果单词后跟 _,则匹配失败, ASCII 数字或 Unicode 字母。

借助现代 ECMAScript 2018+ 标准支持,您可以使用

let text = 'ילד ילדדד יל';
const matchWords = ['יל','ילד'];
const re = new RegExp('(^|[^_0-9\\p{L}])(' + matchWords.join('|') + ')(?![_0-9\\p{L}])','igu');
text = text.replace(re, '$1<mark>$2</mark>');
console.log(text);

另一个 ECMAScript 2018+ 兼容解决方案,完全模拟 Unicode 感知 \b Replace certain arabic words in text string using Javascript 解释了构建 .

关于javascript - 从字符串中的数组中查找单词,仅限整个单词(带有希伯来语字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608123/

相关文章:

javascript - 图像放大脚本

javascript - 使用 jasmine-node 测试节点命令行应用程序

javascript - ng-hide 导致布局中断

javascript - 2 位数字的正则表达式

python - 如何在不替换其他字母的情况下替换某个字母?

c++ - 正则表达式搜索文本然后匹配元素

javascript - AngularJS 使用 ng-upload 上传图片

javascript - Gulp 抛出错误 'Must use import to load ES Module'

javascript - 根据放置正则表达式区分相似值

regex - 可以简化诸如 ([0-9]{2}|[0-9]{4}) 之类的表达式吗?