我目前正在Node JS Express和Oracle中构建一个简单的搜索页面。
我希望向用户显示匹配文本的片段(第一个实例会这样做),以添加SQL找到的位上下文。
示例:
搜索字词:' fish'
结果:亨利真的很喜欢鱼 ing,一旦他发出警告......
我不确定解决此问题的最佳方法 - 我可以检索整个文本块并在Node JS中执行,但我不是非常喜欢将整个文本拖到应用程序,只是为了得到一个片段。
我一直在想REGEXP_SUBSTR
可以做到这一点......但我不确定我是否可以使用正则表达式来检索x
个字符数量匹配词之前和之后。
我是否有正确的想法,或者我是以错误的方式解决这个问题?
由于
SELECT text
, REGEXP_SUBSTR(LOWER(text), LOWER('fish')) AS potential_snippet
FROM table
WHERE LOWER(text) LIKE LOWER('%fish%');
答案 0 :(得分:1)
试试这个:
select text
, SUBSTR( TEXT, INSTR(LOWER(TEXT),'fish', 1)-50,100 )
FROM test
WHERE INSTR(LOWER(text),'fish', 1)<>0;
使用位置和长度数字(在我的示例中为50和100)来限制字符串的长度。
答案 1 :(得分:1)
如果你需要在JavaScript的帮助下提取一些上下文,你可以在正则表达式中使用限制量词:
/\b.{0,15}fish.{0,15}\b/i
请参阅demo
下面,
\b
- 在单词边界处匹配(以便上下文仅包含整个单词).{0,15}
- 换行以外的任何字符(如果需要包含换行符,请替换为[\s\S]
或[^]
)fish
- 关键字 /i
修饰符可启用不区分大小写的搜索。
如果需要动态正则表达式创建,请使用构造函数表示法:
RegExp("\\b.{0,15}" + keyword + ".{0,15}\\b", "i");
此外,如果您需要查找多个匹配项,请在g
旁边使用i
修饰符。