Javascript正则表达式问题

时间:2011-08-25 18:28:56

标签: javascript regex

也许我只是误解了Javascript的正则表达式功能,但是这里...我有一个包含我想删除的表达式的数组,我就是这样:

var removeThese = ['inc\\.','inc','ltd\\.','ltd','\\(c\\)'];

for(var i=0; i < removeThese.length; i++) {
  var find = removeThese[i];
  regex = new RegExp('\\b'+find+'\\b','gi');
  titletext = titletext.replace(regex,'');
}

所以,在上面我希望匹配 inc。,inc,ltd。,ltd (c)的任何岛(全字)表达。我在console.log上的控制台(正则表达式):

/\binc.\b/gi
/\binc\b/gi
/\bltd\.\b/gi
/\bltd\b/gi
/\b\(c\)\b/gi

看起来不错吧?但它完全没有发现(c)和它取代inc时的任何情况。它留下'。',所以

This is a title (c) inc.

变为

This is a title (c) .

我在这里缺少什么?

请注意,我会使用像'(inc \。)|(inc)|(ltd \。)...这样的reg exp但是我在该数组中有一些需要特殊转换的项目(如169转换为在搜索之前的©符号。

2 个答案:

答案 0 :(得分:3)

()不被视为单词字符,因此空格和(之间没有单词边界。这意味着您的\b将无法匹配。

您可以将其更改为:

regex = new RegExp('(^|\\s+)'+find+'(?=\\s+|$)','gi');

如果它位于字符串的开头,或者前面有一些空格,并且在字符串的末尾,或者后跟一些空格,那么将删除该单词。它还会删除字符串前的空格,因此word (c) word2将变为word_word2而不是word__word2(为了清晰起见,标记为下划线的空格)。

答案 1 :(得分:2)

您也可以使用一个正则表达式完成所有操作。我发现在/match here/语法中声明正则表达式要容易得多,因为你不必双重转义。无论如何,这是一行代码和一个正则表达式中的全部内容:

titletext = titletext.replace(/(^|\s+)(inc\.|inc|ltd\.|ltd|\(c\))(?=\s+|$)/gi,'');

您可以在此处看到一个小测试应用:http://jsfiddle.net/jfriend00/wVDBr/