我正在寻找一种方法来选择一个字符串的一部分,标点符号的基础上,字符串没有标点符号。例如,哦,天哪。就是这个。哦。我想选择Oh, my goodness.(注意后面的句点)。我必须搜索的字符串是:哦我的天啊我一直在四处寻找解决这个问题的方法,但我似乎找不到一个好的答案。有人能帮我吗?
Oh, my goodness.
xn1cxnb41#
你的问题缺少一些细节,所以这里有一些假设:
foo bar
some bar foo text
some foo, bar text
some foo: bar text
如果某些假设不正确,可以根据需要调整正则表达式。带有匹配和替换示例的代码:
const input = 'Oh, my goodness. This is it. Oh.'; const searchTerm = 'oh my goodness'; const regex = new RegExp('\\b' + searchTerm.replace(/ +/g, '\\W+') + '\.?', 'i'); console.log({ match: input.match(regex), replace: input.replace(regex, '<b>$&</b>') });
输出:
{ "match": [ "Oh, my goodness." ], "replace": "<b>Oh, my goodness.</b> This is it. Oh." }
正则表达式构造的解释:
'\\b'
'^'
searchTerm.replace(/ +/g, '\\W+')
,
:
'\.?'
'i'
vyswwuz22#
您可以替换所有空格以接受单词之间的字符
const text = 'Oh, my goodness. This is it. Oh.'; const search = 'oh my goodness'; const expression = new RegExp(`${search.replace(/ /g, '.*')}[^.]*\\.*`, 'i'); const [match] = expression.exec(text); console.log(match)
bttbmeg03#
第一个月
[^.]*
\b(oh|my)\b.
(?=goodness)
g
U
简而言之,正则表达式将匹配所有包含所提到单词的句子,并将给定行分成匹配的句子。regex101.com
3条答案
按热度按时间xn1cxnb41#
你的问题缺少一些细节,所以这里有一些假设:
foo bar
将找不到some bar foo text
输入foo bar
将查找some foo, bar text
和some foo: bar text
如果某些假设不正确,可以根据需要调整正则表达式。
带有匹配和替换示例的代码:
输出:
正则表达式构造的解释:
'\\b'
--单词边界(如果要在输入字符串的开头搜索,请替换为'^'
)searchTerm.replace(/ +/g, '\\W+')
-允许任何非字字符,如,
、:
'\.?'
--包括可选点'i'
-忽略大小写的正则表达式标志vyswwuz22#
您可以替换所有空格以接受单词之间的字符
bttbmeg03#
第一个月
[^.]*
和[^.]*
检查句子的开头和结尾\b(oh|my)\b.
匹配句子中的单词oh和my(?=goodness)
是一个正前瞻。我们告诉正则表达式:“* 搜索哦和我的字之前善良*”g
(全局)和U
(非贪婪)正则表达式标志。简而言之,正则表达式将匹配所有包含所提到单词的句子,并将给定行分成匹配的句子。
regex101.com