Javascript正则表达式问题
也许我只是误解了Javascript的正则表达式功能,但接下来。。。我有一个包含要删除的表达式的数组,我是这样做的:Javascript正则表达式问题,javascript,regex,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'); titlet
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,'');
}
看起来不错吧?但它完全忽略了(c)的任何情况,当它取代inc.时,它离开了“.”,所以
This is a title (c) inc.
变成
This is a title (c) .
我错过了什么
注意,我会使用一个reg-exp,比如“(inc\)(inc)|(inc)|(ltd\)…”,但是我在数组中有一些项目需要特殊转换(比如169在被搜索之前被转换成©符号。(
和)
不被视为单词字符,因此空格和之间没有单词边界(
。这意味着您的\b
在那里不匹配
您可以将其更改为以下内容:
regex = new RegExp('(^|\\s+)'+find+'(?=\\s+|$)','gi');
如果单词在字符串的开头,或者前面有空格,在字符串的结尾,或者后面有空格,那么它将删除该单词。它还将删除字符串前面的空格,因此word(c)word2
将变成word\u word2
,而不是word\u word2
(为清晰起见,空格用下划线标记)。(
和)
不被视为单词字符,因此空格和a(
)之间没有单词边界。这意味着您的\b
与之不匹配
您可以将其更改为以下内容:
regex = new RegExp('(^|\\s+)'+find+'(?=\\s+|$)','gi');
如果单词在字符串的开头,或者前面有空格,在字符串的结尾,或者后面有空格,那么它将删除该单词。它还将删除字符串前面的空格,因此
word(c)word2
将变成word\u word2
,而不是word\u word2
(为清晰起见,用下划线标记的空格)。您也可以用一个正则表达式来完成这一切。我发现在/match here/
语法中声明正则表达式要容易得多,因为您不必双重转义。总之,在一行代码和一个正则表达式中有完整的内容:
titletext = titletext.replace(/(^|\s+)(inc\.|inc|ltd\.|ltd|\(c\))(?=\s+|$)/gi,'');
您可以在这里看到一个小测试应用程序:。您也可以使用一个正则表达式来完成这一切。我发现在
/match here/
语法中声明正则表达式要容易得多,因为您不必双重转义。总之,这是一行代码和一个正则表达式中的全部内容:
titletext = titletext.replace(/(^|\s+)(inc\.|inc|ltd\.|ltd|\(c\))(?=\s+|$)/gi,'');
您可以在此处看到一个小测试应用程序:。@waitinformatrain。它不是以前的,因为我忘了逃逸
`s。我在不久前将它更改为\\s`,所以现在它可以工作。摇晃它,谢谢:)总有一天,我将学习这些正则表达式的实际功能,而不是将它们拼凑在一起。@waitinformatrain。这不是以前,因为我忘了逃避`s。我在不久前将其更改为\\s`,所以现在它可以工作了。谢谢:)总有一天,我将学习这些正则表达式的实际功能,而不是将它们拼凑在一起。