Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 1个数字和3个大写字母的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 1个数字和3个大写字母的正则表达式

Javascript 1个数字和3个大写字母的正则表达式,javascript,regex,Javascript,Regex,我没有深入研究regexp,但我知道数字是[0-9],大写字母是[A-Z] 我想知道的是:如何从与regexp匹配的字符串中过滤出某些单词,并对它们进行样式设置。例如: string s = 'Hello ABC1 world C2DF !'; //magic code here //result: 'Hello <b>ABC1</b> world <b>C2DF</b> !' string s='Hello ABC1 world C2DF!';

我没有深入研究regexp,但我知道数字是
[0-9]
,大写字母是
[A-Z]

我想知道的是:如何从与regexp匹配的字符串中过滤出某些单词,并对它们进行样式设置。例如:

string s = 'Hello ABC1 world C2DF !';
//magic code here
//result:
'Hello <b>ABC1</b> world <b>C2DF</b> !'
string s='Hello ABC1 world C2DF!';
//这里有魔法代码
//结果:
“你好,ABC1世界C2DF!”

这一款应该符合您的需要:

/[0-9][A-Z]{3}}[A-Z][0-9][A-Z]{2}[A-Z]{2}[0-9][A-Z]{3}[0-9]/
此项匹配(并且仅匹配):

0ABC
A0BC
AB0C
ABC0
当然,在上面的列表中,
A
B
C
可以是任何大写字符,
0
可以是任何数字。

使用此正则表达式:

/\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/
与:

s.replace(/\b(\d[A-Z]{3}}{A-Z]\d[A-Z]{2}{A-Z]{2}\d[A-Z]{3}\d)\b/g,“$&”);
测试脚本:

var output,
    text    = "9GHJ is saying hello to ABC1 world C2DF, but 89UI is showing up with his friend HUIP, nothing to do, they are not welcome ! As garyh said, these NUMB3RZ should not be replaced",
    regex   = /\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/g,
    replace = "<b>$&</b>";

output = text.replace(regex,replace)

console.log ( output );
var输出,
text=“9GHJ向ABC1 world C2DF问好,但89UI和他的朋友HUIP出现了,没什么可做的,他们不受欢迎!正如garyh所说,这些NUMB3RZ不应该被替换”,
regex=/\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]{3}\d)\b/g,
替换“$&”;
输出=text.replace(regex,replace)
console.log(输出);
将输出以下内容:

<b>9GHJ</b> is saying hello to <b>ABC1</b> world <b>C2DF</b>, but 89UI is showing up with his friend HUIP, nothing to do, they are not welcome ! As garyh said, these NUMB3RZ should not be replaced
9GHJ向ABC1 world C2DF问好,但89UI和他的朋友HUIP出现了,没什么可做的,他们不受欢迎!正如garyh所说,这些NUMB3RZ不应该被替换

要解决这个问题,您肯定需要。其他解决方案也将匹配,例如在“1ABCD”上,并突出显示前四个字符

我的解决方案涉及a,但如果您不想这样做,只需将单词bounders
\b
添加到您自己的解决方案中即可

\b(?=[^\d]*\d[^\d]*)[A-Z\d]{4}\b
看到了吗


我将4个字符的单词与
[A-Z\d]{4}
单词边界
\b
匹配,确保前面或前面没有其他字母或数字。正向前瞻
(?=[^\d]*\d[^\d]*)
确保满足您对一位数字的要求。

您要过滤哪些单词?它们有特定的格式吗?@Lorax长度总是4个字符,其中1个是数字。只有大写字母。该数字可以位于任意位置。即使该数字不存在,它似乎也与所有4个字母和单词匹配。后续问题:是否应过滤掉9位数字<例如,code>123456789?您应该在正则表达式的开头和结尾添加
\b
,以避免在字符串中捕获部分文本,如
2AGS2
AB2SS
2A2AGS2
@Johan您可能的意思是
/[0-9]{9}/
后续问题:应该用9位数字过滤掉一个数字吗?例如123456789?@Johan No,必须使用括号指定基数,即在您的示例中为
/[0-9]{9}/
。我接受这一点,因为这是最正确的答案。谢谢
\b(?=[^\d]*\d[^\d]*)[A-Z\d]{4}\b