gpt4 book ai didi

仅将点匹配为标点符号的 Javascript 正则表达式,没有数字

转载 作者:行者123 更新时间:2023-11-29 19:31:30 27 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来将一个句子拆分成单词。我的第一个想法是按空格或标点符号拆分,然后我意识到我不想拆分像“0.5”这样的带小数的数字,我不想拆分像“14:55:02”这样的时间戳。所以,我试图用负面前瞻和负面回顾来解决我的问题,但我无法将它们放在一起......而且 javascript 似乎不支持回顾。

到目前为止我最好的尝试:

var query = "I've been 0.5 hit at 21:05. I'm okay.";
var delimiter = /[\s\.,:;?!+=\/\\]+(?![0-9])/g;

if(delimiter.test(query)){

var words = query.split(delimiter);
console.log(words);

// ["I've", "been 0.5", "hit", "at 21:05", "I'm", "okay", ""]
}

JSFiddle

所以基本上,我需要一个正则表达式来拆分 [\s\.,:;?!+=\/\\]+ 但如果 则不拆分[\.,:/] 由数字包裹。请帮忙!

最佳答案

这是我的看法:

[\s,;?!+=/\\]+|[.:](?!\d)\s*

Regex101
Fiddle

基本上,我将这两种情况分开,并使前瞻仅在 .: 之后应用。

是的,不幸的是,JS 不支持后视。

对于比较麻烦的I love pizza.2 pizzas please!情况,你需要切换到匹配而不是拆分:

(?:\d[.:]\d|[^\s.:,;?!+=/\\])+

这不会将 .: 算作分隔符,如果它在两个数字之间的话。

Regex101

在 JS 中:

var query = "I've been 0.5 hit at 21:05. I'm okay. I love pizza.2 more pizzas please!" ;
var re = /(?:\d[.:]\d|[^\s.:,;?!+=\/\\])+/g;
var words = [];
var match;

while (match = re.exec(query))
words.push(match[0]);

for (i in words)
document.getElementById("demo").innerHTML += words[i] + "<br>";
<div id="demo"></div>

关于仅将点匹配为标点符号的 Javascript 正则表达式,没有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com