我以这种方式正确地搜索了字符串中的某个单词:
let text = jsonDesc.plain_text;
const product = 'Producto:';
const resultProduct = text.match(new RegExp(product + '\\s(\\w+)'))[1];
console.log( resultProduct ) // Mesa
但是如果有时单词是小写字母而其他时候是大写字母,该如何搜索字符串?
我尝试过:
var product = 'Producto:';
var productU = 'PRODUCTO:';
var resultProduct = text.match(new RegExp(product && productUpper + '\\s(\\w+)'))[1];
并且:
var resultProduct = text.match(new RegExp( '^[a-zA-Z]' + product + '\\s(\\w+)'))[1];
但是不起作用,错误:
未捕获(承诺)TypeError:无法在VueComponent.getAllProducts读取null的属性“ 1”
答案 0 :(得分:1)
您可以将不区分大小写的匹配(i)用作regex flag。
new RegExp(expression, 'i');
在您的情况下,它看起来像text.match(new RegExp(product + '\\s(\\w+)', 'i'))[1];
但是,我建议不要将产品附加到表达式中,因为它可能包含特殊的正则表达式字符。例如,现在您在其中有一个冒号,可能会引起问题。如果product
是固定的,我只需要重写您的代码即可
var product = 'Producto';
text.match(new RegExp(product + '\\:\\s(\\w+)', 'i'))[1];
或者escape the text,然后将其附加到其余
function escapeRegex(expression) { return expression.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }
var product = 'Producto:';
text.match(new RegExp(escapeRegex(product) + '\\s(\\w+)', 'i'))[1];
答案 1 :(得分:0)
首先将所有字符串转换为小写,然后检查字符串是否包含搜索到的单词
let product = 'Producto:'
let productU = 'PRODUCTO:'
let match = product.toLowerCase().includes(productU.toLowerCase())
console.log(match)