我在搜索并尝试多次测试后陷入困境,但无法弄清楚如何解决以下问题。
我在regEx中使用这些字符\x3c
,\x3e
和\x22
,并且保存在*.component.ts
中的变量中,但是当我在标记/ HTML中使用该变量时,它将其转换为<
,>
和"
。结果是我的模式没有按预期工作。
以下是对regex101.com的测试之一,您可以看到它的工作原理应该是:
^(?=.*[a-zA-Z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$
如何防止这种情况并在呈现页面时保留原始字符?它是TypeScript或JavaScript浏览器引擎的行为还是什么?任何提示都会很棒。
答案 0 :(得分:1)
首先,您需要使用双反斜杠将文字反斜杠引入正则表达式模式。即如果你将"\x22"
写成字符串文字,那实际上只是"
。因此,要在字符串文字中定义\x22
,请写"\\x22"
。
然后,你有
^(?=.*[a-zA-Z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$
这里的前瞻是多余的,因为它需要消费部分所需的同一组字符。可以删除前瞻,或者更好地替换为您需要的前瞻(?=[^A-Z]*[A-Z])
,至少需要1个大写ASCII字母:
^(?=[^A-Z]*[A-Z])[A-Za-z\d!\x22#$%&\'()*+,.:;\x3c=\x3e?@[\]^_`{|}~/\\-]{8,50}$
作为字符串文字:
"^(?=[^A-Z]*[A-Z])[A-Za-z\\d!\\x22#$%&'()*+,.:;\\x3c=\\x3e?@[\\]^_`{|}~/\\\\-]{8,50}$"
请参阅regex demo。