如何匹配前面没有字符的字符串?

时间:2014-07-02 18:07:40

标签: javascript regex

我有一个字符串数组,我需要使用JavaScript执行搜索并替换它们。问题是只有当它们不在两个字符之一之前时才需要找到它们。我试过的是:

 var searchString = new RegExp( "(?<![#\|])" + tableName,"");
 if(theLine.search(searchString) != -1){do something;}

tableName是可变的,并根据从数据库中检索的数据为每个调用进行更改。

如果tableName是Fred,我想找到Fred而不是#Fred或者Fred。

我所做的并不起作用,我不知道为什么。这可能是一个简单的蠢事,但我没有看到它。

3 个答案:

答案 0 :(得分:0)

JavaScript正则表达式引擎不支持lookbehinds 。但你可以做这样的正则表达式来解决这个问题:

var s = 'If tableName is Fred, I want to find Fred but not #Fred or |Fred';
var r = s.replace(/([#|]Fred)|Fred/g, '$1')
//=> If tableName is , I want to find  but not #Fred or |Fred

答案 1 :(得分:0)

var s = 'If tableName is Fred, I want to find Fred but not #Fred or |Fred';
s.match(/[^#\|]Fred/g)
[" Fred", " Fred"]

虽然我的答案包含额外空间。你需要做的是

var s = 'If tableName is Fred, I want to find TFred Fred but not #Fred or |Fred';

var replaceWith = "XXXX";
s.replace(/[^#\|]Fred/g, function($1) {
    if($1 != $1.trim()) {
        return " " + replaceWith;
    } else {
        return replaceWith;
    }
})

//output - "If tableName is XXXX, I want to find XXXX XXXX but not #Fred or |Fred"

答案 2 :(得分:-1)

var searchString = new RegExp("(?<![^\|\#])" + tableName,"");
if (theLine.search(searchString) != -1){do something;}

你忘了否定你不希望它匹配的角色范围。

相关问题