![](/img/trans.png)
[英]regex in javascript allow only numbers and one dot followed by max 2 number
[英]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", ""]
}
因此,基本上,我需要一个正则表达式将对[\\s\\.,:;?!+=\\/\\\\]+
进行拆分,但是如果[\\.,:/]
由数字包裹,则不进行拆分。 请帮忙!
这是我的看法:
[\s,;?!+=/\\]+|[.:](?!\d)\s*
基本上,我已经将这两种情况分开,并且仅在之后才适用.
或:
是的,不幸的是,JS不支持回溯。
I love pizza.2 more pizzas please!
情况下,您需要切换到匹配而不是拆分:
(?:\d[.:]\d|[^\s.:,;?!+=/\\])+
这将不算.
或:
如果介于两位数之间,则作为分隔符。
在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.