我目前的代码是:
var user_pattern = this.settings.tag;
user_pattern = user_pattern.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); // escape regex
var pattern = new RegExp(user_pattern.replace(/%USERNAME%/i, "(\\S+)"), "ig");
其中this.settings.tag
是一个字符串,例如" [user =%USERNAME%]"或" @%USERNAME%"。该代码使用pattern.exec(str)
来查找相应标记中的任何用户名,并且工作正常。例如,如果str = "Hello, [user=test]"
,则pattern.exec(str)
会找到test
。
这样可以正常工作,但如果字符串包含在[nocode][/nocode]
标记中,我希望能够阻止匹配。例如,如果str = "[nocode]Hello, [user=test], how are you?[/nocode]" then
pattern.exec(str)`不匹配任何内容。
我不太清楚从哪里开始。我尝试在模式之前和之后使用(?![nocode])
,但无济于事。任何帮助都会很棒。
答案 0 :(得分:0)
在尝试查找用户名之前,可能会过滤掉[nocode]
?
pattern.exec(str.replace(/\[nocode\](.*)\[\/nocode\]/g,''));
我知道这并不是你所要求的,因为现在你必须使用两个独立的正则表达式,但是代码可读性也很重要,这样做在这方面肯定更好。希望这有帮助
JSFiddle:http://jsfiddle.net/1f485Lda/1/
基于此:Regular Expression to get a string between two strings in Javascript
答案 1 :(得分:0)
我只是测试字符串是否首先以[nocode]开头:
/^\[nocode\]/.test('[nocode]');
然后根本不处理它。