如何从单词字符,Javascript清理字符串

时间:2017-01-20 21:48:07

标签: javascript angularjs regex

我试图清理已经从文字文字转换过来的字符串,但我仍然坚持删除特殊字符' ...'

点击按钮"清理",脚本删除所有点,只删除一个特殊字符,但我需要删除所有这些

我的错误在哪里?

这是我的代码,plunker有挣扎

    $scope.string = "My transformed string ………….........…...."

 $scope.removeDots = function () {
        var em = document.getElementsByTagName('em');
        var reg = /\./g;
        var hellip = /…/g

        angular.forEach(em, function (item) {

            if(item.innerText.match(reg)){
                 item.innerText = process(item.innerText)
            } 
            if (item.innerText.match(hellip)){
              item.innerText = item.innerText.replace("…", "")
            }
        });
    };

    function process( str ) {
        return str.replace( /^([^.]*\.)(.*)$/, function ( a, b, c ) {
            return b + c.replace( /\./g, '' );
        });
    }

3 个答案:

答案 0 :(得分:2)

这里存在一些问题,但只需将代码简化为process内的单个正则表达式替换即可处理这两个句点和…个实体,就可以解决所有这些问题:

 $scope.removeDots = function () {
        var em = document.getElementsByTagName('em');
        angular.forEach(em, function (item) {
              item.innerText = process(item.innerText)
        });
    };

    function process( str ) {
        return str.replace( /\.|…/g, '');
    }
});

Plunker demo

答案 1 :(得分:1)

您可以替换.process的每一个匹配项,但只替换…一次。

我不明白为什么你不做.replace(/(\.|…)/g, '')之类的事情。 g修饰符确保每个匹配都被替换。

答案 2 :(得分:1)

你可以先用一个点替换…的出现次数(因为它可能是你找到的唯一的东西),然后用一个点替换任何一个点序列来做两个替换:



function process( str ) {
    return str.replace(/…/g, '.').replace(/\.\.+/g, '.');
}

var test="My transformed string ………….........…....";

console.log(process(test));




您的代码未替换所有内容的原因之一是您使用字符串作为 find 参数,这将导致仅一次替换。通过将正则表达式用作 find 参数,您可以获得g修饰符的效果。