我试图清理已经从文字文字转换过来的字符串,但我仍然坚持删除特殊字符' ...'
点击按钮"清理",脚本删除所有点,只删除一个特殊字符,但我需要删除所有这些
我的错误在哪里?
这是我的代码,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, '' );
});
}
答案 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, '');
}
});
答案 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
修饰符的效果。