3

我对正则表达式的研究不多,但我知道数字是[0-9],大写字母是[A-Z]

我想知道的是:如何从匹配正则表达式的字符串中过滤掉某些单词,并设置它们的样式。例如:

string s = 'Hello ABC1 world C2DF !';
//magic code here
//result:
'Hello <b>ABC1</b> world <b>C2DF</b> !'
4

3 回答 3

4

这应该符合您的需求:

/[0-9][A-Z]{3}|[A-Z][0-9][A-Z]{2}|[A-Z]{2}[0-9][A-Z]|[A-Z]{3}[0-9]/

这匹配(并且仅匹配):

0ABC
A0BC
AB0C
ABC0

当然,在上面的列表中ABC可以是任何大写字符,也0可以是任何数字。

于 2012-11-22T14:09:33.793 回答
2

使用这个正则表达式:

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

在 javascript 中使用replace 方法

s.replace(/\b(\d[A-Z]{3}|[A-Z]\d[A-Z]{2}|[A-Z]{2}\d[A-Z]|[A-Z]{3}\d)\b/g,"<b>$&</b>");

测试脚本:

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 );

将输出这个:

<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
于 2012-11-22T14:09:34.290 回答
2

要解决这个问题,您肯定需要单词边界。另一个解决方案也将匹配例如“1ABCD”并突出显示前四个字符。

我的解决方案涉及向前看,但如果您不希望这样做,只需将边界一词\b用于您自己的解决方案。

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

在 Regexr 上查看

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

于 2012-11-22T14:45:13.880 回答