Javascript 1个数字和3个大写字母的正则表达式
我没有深入研究regexp,但我知道数字是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!';
[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