0

我正在尝试编写代码,以便从字符串(文本)中删除“坏”字。

如果单词后面有逗号或任何特殊符号,则该单词是“坏的”。a to z如果仅包含(小写字母),则该词不是“坏” 。

所以,我想要达到的结果是:

<script>
String.prototype.azwords = function() {
   return this.replace(/[^a-z]+/g, "0");
}

var res = "good Remove remove1 remove, ### rem0ve? RemoVE gooood remove.".azwords();//should be "good gooood"
//Remove has a capital letter
//remove1 has 1
//remove, has comma
//###  has three #
//rem0ve? has 0 and ?
//RemoVE has R and V and E
//remove. has .
alert(res);//should alert "good gooood"
</script>
4

5 回答 5

1

好的,首先你可能想\b在你的正则表达式中使用边界转义这个词。此外,如果匹配坏词有点棘手,因为坏词可能包含小写字符,因此您当前的正则表达式将排除任何包含小写字母的内容。

我很想挑出好词并将它们放入一个新字符串中。这是一个更容易的正则表达式。

/\b[a-z]+\b/g

注意:我不完全确定它是否适用于字符串中的第一个和最后一个单词,因此您可能还需要考虑这一点。http://www.regextester.com/非常有用。

编辑:由于您希望单词后的标点符号为“坏”,这实际上会按照我的建议进行

(^|\s)[a-z]+(\s|$)
于 2013-01-31T11:03:36.590 回答
1

尝试这个:

return this.replace(/(^|\s+)[a-z]*[^a-z\s]\S*(?!\S)/g, "");

它尝试匹配一个单词(由空格/字符串结尾包围)并包含任何(非空格)字符,但至少包含一个不是a-z. 然而,这是相当复杂且不可维护的。也许您应该尝试一种更实用的方法:

return this.split(/\s+/).filter(function(word) {
    return word && !/[^a-z]/.test(word);
}).join(" ");
于 2013-01-31T11:05:17.520 回答
1

试试这个:

 var res = "good Remove remove1 remove, ### rem0ve? RemoVE gooood remove.";     
 var new_one = res.replace(/\s*\w*[#A-Z0-9,.?\\xA1-\\xFF]\w*/g,'');


//Output `good gooood`

说明

             \s*           # zero-or-more spaces
             \w*           # zero-or-more alphanumeric characters 
             [#A-Z0-9,.?\\xA1-\\xFF]  # matches any list of characters
             \w*           # zero-or-more alphanumeric characters

             /g  - global (run over all string) 
于 2013-01-31T11:12:37.930 回答
1

首先,如果可以避免的话,我不建议更改 String(或任何本机对象)的原型,因为您可能会与可能以不同方式定义相同属性的其他代码发生冲突。将这样的自定义方法放在命名空间对象上要好得多,尽管我相信有些人会不同意。

第二,有没有必要完全使用RegEx?(真正的问题;不要开玩笑。)

是一个简单的旧 JS 函数的示例,在这里和那里使用了一点点正则表达式。更易于评论、调试和重用。

这是代码:

var azwords = function(str) {
   var arr = str.split(/\s+/),
       len = arr.length,
       i = 0,
       res = "";
   for (i; i < len; i += 1) {
       if (!(arr[i].match(/[^a-z]/))) {
           res += (!res) ? arr[i] : " " + arr[i];
       }
   }
   return res;
}

var res = "good Remove remove1 remove, ### rem0ve? RemoVE gooood remove."; //should be "good gooood"

//Remove has a capital letter
//remove1 has 1
//remove, has comma
//###  has three #
//rem0ve? has 0 and ?
//RemoVE has R and V and E
//remove. has .

alert(azwords(res));//should alert "good gooood";
于 2013-01-31T11:23:21.893 回答
0

这将找到您想要的所有单词 /^[az]+\s|\s[az]+$|\s[az]+\s/g 以便您可以使用匹配。

this.match(/^[a-z]+\s|\s[a-z]+$|\s[a-z]+\s/g).join(" ");应该返回有效单词的列表。

请注意,这需要一些时间作为 JSFiddle,因此拆分和迭代您的列表可能更有效。

于 2013-01-31T11:58:22.153 回答