也许我只是误解了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转换为在搜索之前的©符号。
答案 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/。