Javascript 如何通过正则表达式在连续标记之间获取单词?

Javascript 如何通过正则表达式在连续标记之间获取单词?,javascript,regex,Javascript,Regex,我正在尝试解析:hello::world:并分别抓取hello和world。不幸的是,这方面的结果如下: const str = ':hello::world:' const matches = str.match(/\:[^\s]+\:/g) console.log(matches) // [':hello::world:'] 您的正则表达式匹配任何字符串,但导致匹配所有字符串的空格除外。因此,您需要匹配除: const str=':你好::世界:' 常量匹配=str.match(/[^:

我正在尝试解析
:hello::world:
并分别抓取
hello
world
。不幸的是,这方面的结果如下:

const str = ':hello::world:'
const matches = str.match(/\:[^\s]+\:/g)
console.log(matches) // [':hello::world:']

您的正则表达式匹配任何字符串,但导致匹配所有字符串的空格除外。因此,您需要匹配除

const str=':你好::世界:'
常量匹配=str.match(/[^::]+/g);

console.log(匹配项)您的正则表达式匹配任何字符串,但导致匹配所有字符串的空格除外。因此,您需要匹配除

const str=':你好::世界:'
常量匹配=str.match(/[^::]+/g);

console.log(匹配项)您的特定用例允许更简单的实现,但由于对您的问题要求非常严格,您可以使用以下正则表达式:

/(?<=:)([^:]+)(?=:)/g

/(?您的特定用例允许更简单的实现,但由于对您的问题要求非常严格,您可以使用以下正则表达式:

/(?<=:)([^:]+)(?=:)/g

/(?您当前的正则表达式
:[^\s]+:
匹配一个
,然后使用一个否定字符类来匹配一个非空白字符。这将匹配到示例字符串的结尾

然后它将再次匹配字符串中的最后一个
,从而生成
:hello::world:

您可以使用捕获组,在冒号之间不匹配冒号
([^::]+)
,并在结果中获得第一个捕获组。请注意,您不必转义冒号:

:([^:]+):

const regex=/:([^:]+):/g;
常量str=`:hello::world:`;
让m;
while((m=regex.exec(str))!==null){
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
console.log(m[1]);

}
您当前的正则表达式与一个
匹配,然后使用一个否定字符类来匹配一个非空白字符。这将匹配到示例字符串的结尾

然后它将再次匹配字符串中的最后一个
,从而生成
:hello::world:

您可以使用捕获组,在冒号之间不匹配冒号
([^::]+)
,并在结果中获得第一个捕获组。请注意,您不必转义冒号:

:([^:]+):

const regex=/:([^:]+):/g;
常量str=`:hello::world:`;
让m;
while((m=regex.exec(str))!==null){
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
console.log(m[1]);

}
使用
/:[^\s:][+:/g
如果这是所有字符串的精确语法,则使用简单的
/\w+/g
即可。它基本上意味着:提取由字母和数字组成的所有相邻字符串,并忽略任何其他字符。使用
/:[^\s:]+:/g
如果这是所有字符串都将具有的确切synxat,则简单的
/\w+/g
即可。它基本上意味着:提取由字母和数字组成的所有相邻字符串,忽略任何其他字符。请注意@Mohammad,这很好。解释花费如此长时间的原始答案也很有启发性。请注意@Mohammad,很高兴知道。最初解释为什么花了这么长时间的答案也很有启发性。