javascript - AngularJS - 突出显示部分文本会导致非英语语言中的单词损坏

标签 javascript angularjs regex arabic-support

在下面的代码片段中,我尝试突出显示与阿拉伯语搜索输入匹配的单词的每个部分,但这会使字母在文本中分开。我该如何解决这个问题?

尝试在字段中输入msis,你就会发现问题。

angular.module("myApp", [])
.controller("main", function($scope){
$scope.content="تتيح لك إدارة المستخدمين العديد من الخدمات الأساسية كعرض مستخدمي النظام والتعديل عليها وحذفها.. إضافة إلى عمليات الفلترة عليهابناء على عدة خيارات متاحة "
})
 .filter('highlight', function ($sce) {
        return function (text, searchSrting) {
            if(searchSrting){
                searchSrting = searchSrting.split(/\s+/);
                if(typeof text !== "undefined")
                    for (var i = 0; i < searchSrting.length; i++) {
                        text = text.replace(new RegExp('(' + searchSrting[i] + ')', 'gi'),
                            '<span class="highlighted">$1</span>')
                    }
                return $sce.trustAsHtml(text)
            }
        }
    })
.highlighted{
  background-color : yellow
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.7/angular.js"></script>

<div ng-app="myApp">
<div ng-controller="main">
  <label>search</label>
  <input ng-model="searchString"/>
  <div ng-if="!searchString">{{content}}</div>
  <div ng-if="searchString" ng-bind-html="content | highlight:searchString"></div>

  </div>
</div>

最佳答案

添加几个 zero-width-joiners在突出显示范围之前和结尾处以使角色正确连接:

text = text.replace(new RegExp('(' + searchSrting[i] + ')', 'gi'),
   '&zwj;<span class="highlighted">$1&zwj;</span>')

关于javascript - AngularJS - 突出显示部分文本会导致非英语语言中的单词损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064199/

相关文章:

javascript - 在 js 中替换字符串的最快方法?

javascript - 使用 TypeScript 扩展 Element 原型(prototype)

javascript - 如何更改 div 背景颜色并在加载新页面后保持高亮显示?

javascript - Highcharts NG 股票图表动画效果仅在导航器类型 : column

javascript - 基本 Angular : Uncaught SyntaxError: Unexpected token

regex - Perl 正则表达式中的大括号

regex - 为什么这个 grep 命令没有返回任何东西? ( bash )

javascript - AngularJS - 通过 ng-if 获取过滤数组的长度

angularjs - Angular-ui typeahead 自定义模板

ruby - 正则表达式将字符串视为 ruby​​ 中的多行