gpt4 book ai didi

javascript - 为句子及其子集设计正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:24 25 4
gpt4 key购买 nike

对于下面两句话,

var first_sentence = 'My cat is sleeping';
var second_sentence = 'My cat is sleeping with a blanket';

我尝试使用以下正则表达式来获取动词( sleep )和名词(毯子)。

var regex = /My cat is (.+?)\s+with.?(.+)?/gi.exec('My cat is sleeping with a blanket');
console.log(regex);
/*
[ 0 : 'My cat is sleeping with a blanket'
1 : 'sleeping'
2 : 'a blanket'
index : 0
input : 'My cat is sleeping with a blanket'
length : 3 ]
*/

这个正则表达式很好用,但是当我将它应用到第一个句子时,它返回 null,对此有什么想法吗?

var regex = /My cat is (.+?)\s+with.?(.+)?/gi.exec('My cat is sleeping');
console.log(regex);
// null

最佳答案

在第一句中,没有 \s+with.?(.+)? 部分需要存在一些文本(1+个空格,然后)。您需要用 (?:....)? :

包装模式中可选的部分
/My cat is (\S+)(?:\s+with\s+(.*))?/gi

请参阅regex demo

详细信息:

  • 我的猫是 - 文字
  • (\S+) - 第 1 组捕获 1+ 个非空白符号
  • (?:\s+with\s+(.*))? - 可选序列:
    • \s+with\s+ - with 单词两侧各有 1 个以上空格
    • (.*) - 第 2 组捕获除换行符之外的任何 0+ 个字符

JS:

var ss = [ "My cat is sleeping", "My cat is sleeping with a blanket"]; 
var rx = /My cat is (\S+)(?:\s+with\s+(.*))?/i;
for (var s = 0; s < ss.length; s++) {
document.body.innerHTML += "Testing \"<i>" + ss[s] + "</i>\"... ";
if ((m = ss[s].match(rx))!==null) {
document.body.innerHTML += "Found: <b>" + m[1] + "</b>" + (m[2] ? " and <b>" + m[2] : "") + "</b><br/>";
} else {
document.body.innerHTML += "NOT Matched: <b>" + ss[s] + "</b><br/>";
}
}

关于javascript - 为句子及其子集设计正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829289/

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