多行字符串 findIndex()

我试图在我的字符串中找到一个多行子字符串。


我的代码:


data = `if (res) {

                                new PNotify({

                                    title: TAPi18n.__('success'),

                                    text: TAPi18n.__('image_uploaded'),

                                    type: 'info',

                                    styling: 'bootstrap3'

                                });

                            }

                            if (err) {

                                return new PNotify({

                                    title: TAPi18n.__('error'),

                                    text: err,

                                    type: 'error',

                                    styling: 'bootstrap3'

                                });

                            }`;


/*not found...*/

match = `new PNotify({

              title: TAPi18n.__('error'),

              text: err,

              type: 'error',

              styling: 'bootstrap3'

            })`;

console.log(data);

console.log(match);

console.log(data.indexOf(match));

那条线console.log(data.indexOf(match));告诉我-1。我的代码有什么问题?我怎样才能进行多行搜索?


梵蒂冈之花
浏览 177回答 2
2回答

饮歌长啸

match问题是和之间的空格数量不匹配data。您可以转换match为允许可变数量空白的正则表达式。第一个match.replace()用于转义字符串中的所有特殊正则表达式字符,第二个将空格转换为,\s+以便匹配任意数量。data = `if (res) {                                new PNotify({                                    title: TAPi18n.__('success'),                                    text: TAPi18n.__('image_uploaded'),                                    type: 'info',                                    styling: 'bootstrap3'                                });                            }                            if (err) {                                return new PNotify({                                    title: TAPi18n.__('error'),                                    text: err,                                    type: 'error',                                    styling: 'bootstrap3'                                });                            }`;match = `new PNotify({              title: TAPi18n.__('error'),              text: err,              type: 'error',              styling: 'bootstrap3'            })`;re = new RegExp(match.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&').replace(/\s+/g, '\\s+'));result = data.match(re);console.log(result && result.index);

翻过高山走不出你

您需要在比较它们之前对字符串进行规范化这是一个简单的函数,可以按行拆分字符串并删除每行的空格,然后再将所有内容重新组合在一起function normalizeString(str){  return str.split('\n').map(e => e.trim()).join('')}输出:data = `if (res) {                                new PNotify({                                    title: TAPi18n.__('success'),                                    text: TAPi18n.__('image_uploaded'),                                    type: 'info',                                    styling: 'bootstrap3'                                });                            }                            if (err) {                                return new PNotify({                                    title: TAPi18n.__('error'),                                    text: err,                                    type: 'error',                                    styling: 'bootstrap3'                                });                            }`;/*not found...*/match = `new PNotify({              title: TAPi18n.__('error'),              text: err,              type: 'error',              styling: 'bootstrap3'            })`;// normalize stringsvar normalizedData = data.split('\n').map(e => e.trim()).join('')var normalizedMatch = match.split('\n').map(e => e.trim()).join('')console.log(normalizedData)console.log(normalizedMatch)console.log(normalizedData.indexOf(normalizedMatch));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript