编辑的
我需要使用Javascript在‘和'/’/‘之间找到两个字符。
我用的是这个正则表达式:
([^.][/[string]]|\/string\/)|(\[(string))|(\/(string))| ((string)\])|((string)\/)那会得到两个字符,但也会得到一个字符。
问题是,我怎样才能得到两个角色呢?
我还想得到字符串中的两个字符,我的意思是不仅仅是精确的匹配。
例如:
用户输入: dz它必须找到包含"dz“的精确匹配,例如-> "dzone”,而不是"dazone“。目前,我得到了两个字符串的匹配,"dzone“和"dazone”。
发布于 2021-12-15 12:27:29
您可以选择性地重复除分隔符之外的任何字符,它们之间的分隔符是自定义的,并在一组中捕获您想要保留的内容。
如果希望对/dzone/dzone/进行多个匹配,则可以将最后一个分隔符断言到右侧,而不是匹配它。
匹配在第1组或第2组中,您可以在其中检查它们是否存在。
\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])模式匹配:
\/匹配/[^\/]*(dz)[^\/]*捕获组1中的dz ( /以外的可选字符之间的)(?=\/)正向前看,向右断言/|或\[匹配[[^\][]*(dz)[^\][]*捕获组2中的dz ( [和] -(?=])正向前瞻之外的可选字符之间的),向右断言]。这将匹配单词中dz的1次出现。如果要匹配整个单词,可以将捕获组扩展到否定字符类之前和之后,例如:
\/([^\/]*dz[^\/]*)(?=\/)|\[([^\][]*dz[^\][]*)(?=])
const regex = /\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])/g;
[
"[dzone]",
"/dzone/",
"/dzone/dzone/",
"/testdztest/",
"[dazone]",
"/dazone/",
"dzone",
"dazone"
].forEach(s =>
console.log(
`${s} --> ${Array.from(s.matchAll(regex), m => m[2] ? m[2] : m[1])}`
)
);
如果受支持,还可以使用无限量词匹配分隔符之间所有出现的dz:
(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])
const regex = /(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])/g;
[
"[adzadzone]",
"[dzone]",
"/dzone/",
"/dzone/dzone/",
"/testdztest/",
"[dazone]",
"/dazone/",
"dzone",
"dazone"
].forEach(s => {
const m = s.match(regex);
if (m) {
console.log(`${s} --> ${s.match(regex)}`);
}
});
https://stackoverflow.com/questions/70363413
复制相似问题