将字符串拆分为;只要它's不在»«
Split a string by ; as long as it's not between » «
尽管标题不言自明,但我会稍微描述一下这个问题。
所以我想用;
来分割一个字符串。但是,如果;
位于这两个字符» «
之间,则不要将其拆分。当然,一个字符串中可以有多个» «
。
此:var myString = "Split this; »Don't split this; don't split«; split this again; this is split";
应返回:["Split this", "»Don't split this; don't split«", "split this again", "this is split"]
我想这可以用regex解决,但我还没有运气。
以下是让我们开始的代码:http://jsbin.com/wivuyucifo/1/edit?html,js,控制台
我会将其标记为重复,因为我刚刚从另一个StackOverflow答案中提取了以下regex代码(请参阅:javascript/regex忽略双引号中的分号),但是,以下答案应该有助于解释如何将该答案转换为具有不同起始/结束引号的答案。
var myString = "Split this; »Don't split this; don't split«; split this again; this is split";
var regex = /(?!;|$)[^;»]*((»[^«]*«)[^;»]*)*/g;
var results = myString.match(regex);
document.write(JSON.stringify(results));
如果你不必担心嵌套的guilemets,你可以使用一个非常简单的算法,如下所示:
var myString = "Split this; »Don't split this; don't split«; split this again; this is split";
console.log(mySplit(myString));
function mySplit(input) {
let result = [];
let isQuoted = false;
let temp = "";
for(let i=0; i < input.length; i++) {
let c = input[i];
switch (c) {
case "»":
temp += c;
isQuoted = true;
break;
case "«":
temp += c;
isQuoted = false;
break;
case ";":
if (isQuoted) {
temp += c;
} else {
result.push(temp);
temp = "";
}
break;
default:
temp += c;
break;
}
}
result.push(temp);
return result;
}
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 接受不在列表中的值-引导组合框
- 通过链接重定向不;我不在jstree中工作
- gulp-if-javascript文件,但不在gulp-useref的特定目录中
- 将不在模型中的数据返回到mvc控制器
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 选择不在GridView-ASP.NET中激发
- 如果助手不在,如何从Grunt中的代码中调用任务
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- Javascript-在文本区域中断,但不在段落中中断
- 将字符串拆分为;只要它's不在»«
- YouTube作为弹出窗口在桌面版本上播放,但不在移动设备上播放
- 如何在不在本地下载的情况下将url中提供的文件(pdf/doc)转换为json/string/base64格式
- 为什么不在浏览器上获得JQuery效果呢
- 点击选择Div不在IE上工作
- 为什么 JS 不在滚动时调用函数
- 为什么ngModelCtrl$脏不在我的指令中更新
- Bookshelf.js设置的属性不在数据库中
- Javascript函数不在deleteform上运行