因此,我想使用正则表达式捕获JavaScript中两个特殊字符之间的子字符串。
假设我有字符串"$Hello$, my name is $John$"
,我希望.match返回[Hello, John]
的数组。
*此外,我不想捕获两个匹配项之间的匹配项。因此,我不想捕获$,我的名字是$,因为从技术上讲,它在两个$之间。
我使用的正则表达式是
var test = str.match(/(?<=\$)(.*)(?=\$)/);
可以,但是将每个条目重复两次。所以它有
[你好,你好,约翰,约翰]。
我也用过var test = str.match(/(?<=\$)[^\$]+?(?=\$)/g)
但这会返回每个匹配项之间的所有内容(我在$上方列出的示例,我的名字是$。)
我该如何解决?
答案 0 :(得分:2)
您可以匹配第一个和第二个美元符号,并使用捕获组来捕获介于中间的字符,而否定的字符类将匹配除美元符号以外的任何字符。
\$([^$]+)\$
您可以使用exec而不是使用match。例如:
var str = "$Hello$, my name is $John$";
var regex = /\$([^$]+)\$/g;
var m;
var test = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
test.push(m[1]);
}
console.log(test);
答案 1 :(得分:1)
我能够通过/(?<=\$)[^$ ]+(?=\$)/g
获得想要的比赛。
它将匹配两个美元符号之间的每个单词,但是它依赖于两个假设。首先是$
不能作为字符出现在句子中,例如$Your$ total is $4.50, cash or $card$
。第二个是美元符号内绝不会有空格,例如$Hello$, my name is $John Smith$
。只要这行得通,那就应该很好。
答案 2 :(得分:0)