繁体   English   中英

仅将点与标点匹配的Javascript正则表达式,无数字

[英]Javascript regex that matches dot as punctuation only, no numbers

我正在尝试编写一个正则表达式将一个句子拆分成单词。 我最初的想法是拆分空格或标点符号,然后我意识到我不想拆分带有小数的数字(例如“ 0.5”),也不想拆分时间戳(如“ 14:55:02”)。 因此,我尝试使用否定的前瞻性和否定的lookbehind解决问题,但是我无法将它们放在一起...而且javascript中似乎不支持lookbehind。

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

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
小提琴

基本上,我已经将这两种情况分开,并且仅在之后才适用. :

是的,不幸的是,JS不支持回溯。

I love pizza.2 more 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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM