例子: 这只是一个简单的句子。
我想匹配这句话和句子之间的每个字符。换行符应该被忽略。我想不出正确的语法。
例子: 这只是一个简单的句子。
我想匹配这句话和句子之间的每个字符。换行符应该被忽略。我想不出正确的语法。
当前回答
这样的:
This is (.*?) sentence
工作在javascript。
其他回答
在VIM中快速搜索,你可以使用 在Vim控制提示符:/这是。*\_.*句子
需要惰性量词
重新提出这个问题是因为公认答案中的正则表达式对我来说似乎不太正确。为什么?因为
(?<=This is)(.*)(?=sentence)
会和我的第一句话相匹配。这是我的第一句话。这是我的第二句话。
看到演示。
在两个环视之间需要一个惰性量词。增加一个?使恒星变懒。
这是你想要的:
(?<=This is).*?(?=sentence)
看到演示。我删除了不需要的捕获组。
DOTALL模式匹配跨换行
注意,在演示中设置了“点匹配换行模式”(a.k.a)点-all(参见如何在各种语言中打开DOTALL)。在许多正则表达式中,您可以使用在线修饰符(?s)设置它,将表达式转换为:
(?s)(?<=This is).*?(?=sentence)
参考
正则表达式贪婪的多种程度 星号和加号重复
用这个:(?=开始名)(?=结束名)
对于JavaScript,你可以使用[^]来匹配任何字符,包括换行符。
使用带点的/s标志。匹配任何字符也可以,但应用于整个模式,JavaScript不支持内联修饰符来打开/关闭标志。
为了匹配尽可能少的字符,可以通过添加问号使量词非贪婪,并使用捕获组提取介于两者之间的部分。
This is([^]*?)sentence
请参阅regex101演示。
作为旁注,为了不匹配部分单词,你可以使用像\bThis和句子\b这样的单词边界
const s = "这只是一个简单的句子"; const regex = /这是([^]*?)句子/; Const m = s.match(正则表达式); 如果(m) { console.log (m [1]); }
JavaScript中的巡视变体是(?<=This is)[^]*?(?=sentence),你可以在JS正则表达式中检查Lookbehind的支持。
请参见关于向后查找的重要说明。
const s = "这只是一个简单的句子"; 常量regex = /(?< =这是)[^]* ?(? =句子)/; Const m = s.match(正则表达式); 如果(m) { console.log (m [0]); }
你可以简单地使用这个:\ this is .*?\句子