Regex:单词的开头和结尾必须有撇号(“单词”)

n6lpvg4x  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(141)

我现在有一个使用正则表达式的程序:

const regex = /[\s]|('[^']')|[\w-]+|[']/gm;

运行时:

console.log("'one 'two' three'".match(regex) || []);

我得到:

[
    "'",
    "one",
    " ",
    "'",
    "two",
    "'",
    " ",
    "three",
    "'"
]

我需要以一种我可以在最后得到的方式更新正则表达式:

[
    "'",
    "one",
    " ",
    "'two'",
    " ",
    "three",
    "'"
]
8e2ybdfx

8e2ybdfx1#

你在引用的模式中漏掉了+

\s|('[\w-]+')|[\w-]+|'
console.log("'one 'two' three'".match(/\s|('[\w-]+')|[\w-]+|'/gm) || []);
// Array(7) [ "'", "one", " ", "'two'", " ", "three", "'" ]

我还将其更改为只匹配单词符号和减号(与下一个模式类似),以排除'one '的匹配。
如果需要匹配引号中的短语(如'abc abc'),则可以使用\s|('(?=[\S])[^']+?(?<=[\S])')|[\w-]+|'
EDIT:根据OP的正确输入,允许包含'的单词,如that's

\s|((?<=[\s|^])'[\w-][\w'-]*[\w-]'(?=\s|$))|[\w-][\w'-]*[\w-]|'|\w

相关问题