如何在变量中找到无效的十六进制代码?
有效的:
A
䄁
或
-amp;#x41;
-amp;#x4101;
在' x'之后必须有2或4个字符。然后';'
无效:
A
䄐
�
-amp;#x41
-amp;#x4110
-amp;#x410110;
像这样的字符串:
var str = "Your done. -amp;#x2022No more late night... �no....";
我找到了这个正则表达式:
str.match(/(?:-amp;|&)#x\d{1,4}(?=[^;\n]*$)/ig);
但问题是它在x值hex之后不匹配超过4个字符:
-amp;#x410110;
�
谢谢。
(我想找到像-amp; #x或&amp ;;#x开头但是没有&#34 ;;"或者在x之后有超过4或小于2的字符)
答案 0 :(得分:0)
如果您只想允许2 或 4位数,则无法使用范围。
(?:-amp;|&)#x(?:\d\d|\d{4});
(?=[^;\n]*$)
是一个非捕获前瞻,表示"在第四个数字之后,必须有零个或多个非;,非换行字符直到字符串结束"这实际上对我没有意义。
答案 1 :(得分:0)
您可以使用这样的正则表达式来匹配有效数据:
^&#x(\d{2}|\d{4});$
<强> Working demo 强>
我们的想法是匹配仅包含&#x
加上2或4个数字的字符串和;
因此,如果您想获取无效数据,可以使用discard技术并使用这样的正则表达式:
^&#x(?:\d{2}|\d{4});$|(.+)
^--- match valid but.. ^---- capture the rest (invalid data)
<强> Working demo 强>
这意味着匹配有效字符串并将其丢弃,但抓住其余内容
匹配信息:
MATCH 1
1. `A`
MATCH 2
1. `䄐`
MATCH 3
1. `�`
MATCH 4
1. `-amp;#x41`
MATCH 5
1. `-amp;#x4110`
MATCH 6
1. `-amp;#x410110;`
答案 2 :(得分:0)
无效的十六进制位于第1组
# /(?:-amp;|&)\#x(?![a-f0-9]{2}(?:[a-f0-9]{2})?;)([a-f0-9]*;?)/
(?:
-amp;
| &
)
\#x
(?!
[a-f0-9]{2}
(?: [a-f0-9]{2} )?
;
)
( # (1 start)
[a-f0-9]*
;?
) # (1 end)