我有以下正则表达式:
/ ^ [a-f0-9] {8} $ /--此表达式提取8个字符串作为 md5哈希,例如:如果我有以下字符串“ hello世界.305eef9f x1xxx 304ccf9f test1232“,它将返回“ 304ccf9f”
我还有以下正则表达式:
/。[^。] * $ /--此表达式在最后一个句点(包括)之后提取一个字符串,例如,如果我有“ hello world.this.is.atest.case9.23919sd3xxxs”,它将返回“ .23919sd3xxxs”
事实是,我已经阅读了一些有关正则表达式的信息,但是为了在最后一个句点(包括在内)之后找到md5字符串,我无法将这两个表达式结合在一起,例如:
topLeftLogo.93f02a9d.controller.99f06a7s ---->必须返回“ .99f06a7s”
提前感谢您的时间和帮助!
答案 0 :(得分:1)
要在此范围内[a-f0-9]
的最后一个点之后匹配字符八次,您可以(如果支持)使用正向超前(?!.*\.)
来匹配您的值并断言后面的内容不包含点:
\.[a-f0-9]{8}(?!.*\.)
如果您要匹配a-z中的字符而不是99f06a7s
等a-f字符,则可以使用[a-z0-9]
关于第一个示例
由于锚点^[a-f0-9]{8}$
和^
,此正则表达式$
将从字符串的开头到结尾匹配字符类中的一个范围8次。在同一行的hello world .305eef9f x1xxx 304ccf9f test1232
中找不到匹配项。
关于第二个示例
.[^.]*$
将匹配任何字符零次或更多次,然后不匹配点。例如,这也将匹配单个a
,并且不必首先匹配点,因为您必须对点进行转义才能从字面上进行匹配。
答案 1 :(得分:1)
/^[a-f0-9]{8}$/
---此表达式提取8个字符串作为md5哈希
是的,但是它不会从“ hello world .305eef9f x1xxx 304ccf9f test1232”返回“ 304ccf9f”,因为正则表达式中的^
表示字符串的开始。它怎么可能在字符串中间匹配?
/.[^.]*$/
---该表达式在最后一个句点之后提取一个字符串
不。如果您仅对第一个点进行转义\.
要结合使用这两种方法,您必须将^
替换为\.
:
\.[a-f0-9]{8}$
答案 2 :(得分:1)
我添加这个是为了防止人们需要解决类似的问题:
情况1:例如,我们要从文件名字符串中获取十六进制([a-f0-9])8个字符的字符串 在最后一个句点和文件扩展名之间,例如,以删除该“散列”部分:
示例:
file.name2222.controller.2567d667.js ------>返回 .2567d667
我们将需要使用以下正则表达式:
\.[a-f0-9]{8}(?=\.\w+$)
情况2:例如,我们希望与上述相同,但忽略了第一个句点:
示例:
file.name2222.controller.2567d667.js ------>返回 2567d667
我们将需要使用以下正则表达式
[a-f0-9]{8}(?=\.\w+$)