Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中用于令牌替换的正则表达式_Javascript_Regex - Fatal编程技术网

JavaScript中用于令牌替换的正则表达式

JavaScript中用于令牌替换的正则表达式,javascript,regex,Javascript,Regex,我对JavaScript有一个非常具体的要求,我想知道是否有人可以帮助我 我正在寻找一个验证正则表达式,可以用来验证字符串中的令牌。每个令牌的格式如下: (__([A-Z1-9_])+__) 下面是两个下划线,后跟任意数量的大写字符、数字或下划线,并以另外两个下划线结尾。例如: __A_TOKEN__ __ANOTHER_1T_O_K_E_N__ 令牌不能包含两个下划线,因此以下内容无效: __A__TOKEN__ 最后,字符串中可能有多个标记,包括或不包括其他前导或尾随字符,如下所示:

我对JavaScript有一个非常具体的要求,我想知道是否有人可以帮助我

我正在寻找一个验证正则表达式,可以用来验证字符串中的令牌。每个令牌的格式如下:

(__([A-Z1-9_])+__)
下面是两个下划线,后跟任意数量的大写字符、数字或下划线,并以另外两个下划线结尾。例如:

__A_TOKEN__
__ANOTHER_1T_O_K_E_N__
令牌不能包含两个下划线,因此以下内容无效:

__A__TOKEN__
最后,字符串中可能有多个标记,包括或不包括其他前导或尾随字符,如下所示:

http://__DOMAIN__/__PATH__/logs/__LOGFILE__.log
理论上,甚至可能有两个令牌紧挨着另一个,例如:

__TOKEN_A____TOKEN_B__
我已经玩了一段时间的正则表达式,但这让我很难验证它。只需检查带有可选前导/尾随文本的单个标记即可,如下所示:

^(.*)?(__([A-Z1-9_])+__)+(.*)?$
但是我如何检查多个令牌,如下面所示(使用上面的正则表达式进行验证):

xxx\uuuu大写字母\uuuuyy\uuuu小写字母__

这是不允许的,因为小写字母不是有效的标记


这是通过编程而不是通过正则表达式进行验证的最佳方法吗?

我为您提供了一个解决方案:

/__([A-Z\d]+(?:_[A-Z\d]+)*)__/g
是的,这里有重复,但这是直接的改变


您可以在此处查看此链接的操作:

这将考虑到您通过使用反向查找提供的规则

var str = "__TOKEN_A____TOKEN_B__"; 
var res = str.match(/__(?:(?!__)[A-Z1-9_])+__/g);
alert(res);
Regex

/__(?:(?!__)[A-Z1-9_])+__/g
解释

__            -- Match the two underscores (the start of a token)
(?:           -- Non-capturing group
 (?!__)       -- Negative look behind to check if we're starting a new token
 [A-Z1-9_]    -- Valid characters within the token
)+            -- Allow one or more valid characters
__            -- The ending token sequence of two underscores